title: Haskell infinite recursion
body: <p>The following function computes the Fibonacci sequence:</p>
  
  <pre><code>fib = 0 : 1 : (zipWith (+) fib (tail fib))
  </code></pre>
  
  <p>If we run it, we will get an infinite list, but how does the recursion work? Why does it get to print numbers on the screen if it the function keeps calling itself? I would appreciate if you could explain how the compiler manages the calls.</p>