title: How do I use fix, and how does it work?
body: <p>I was a bit confused by the documentation for <code>fix</code> (although I think I understand what it's supposed to do now), so I looked at the source code.  That left me more confused:</p>
  
  <pre><code>fix :: (a -&gt; a) -&gt; a
  fix f = let x = f x in x
  </code></pre>
  
  <p>How exactly does this return a fixed point?</p>
  
  <p>I decided to try it out at the command line:</p>
  
  <pre><code>Prelude Data.Function&gt; fix id
  ...
  </code></pre>
  
  <p>And it hangs there.  Now to be fair, this is on my old macbook which is kind of slow.  However, this function can't be <em>too</em> computationally expensive since anything passed in to id gives that same thing back (not to mention that it's eating up no CPU time).  What am I doing wrong?</p>