The best explanation I've found for how Haskell's evaluation works is here: <a href="http://chimera.labs.oreilly.com/books/1230000000929/ch02.html#sec_par-eval-whnf">http://chimera.labs.oreilly.com/books/1230000000929/ch02.html#sec_par-eval-whnf</a><br>
<br>On Monday, December 23, 2013, Eduardo Sato  wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><pre><font face="Helvetica Neue, Helvetica, Arial, sans-serif" size="3"><span style="white-space:normal">Hello, guys.</span></font></pre>
<pre><font face="Helvetica Neue, Helvetica, Arial, sans-serif" size="3"><span style="white-space:normal">Recently I came across the definition of the function 'forever' on hoogle. I am intrigued that it works.</span></font></pre>

<pre><font face="Helvetica Neue, Helvetica, Arial, sans-serif" size="3"><span style="white-space:normal">The recursive definition does make sense to me in a mathematical way, but I can't figure out how it works under the hood in terms of thunks.</span></font></pre>

<pre><font face="Helvetica Neue, Helvetica, Arial, sans-serif" size="3"><span style="white-space:normal">To tell you the truth, I don't know how laziness works in general in haskell.</span></font></pre><pre><font face="Helvetica Neue, Helvetica, Arial, sans-serif" size="3"><span style="white-space:normal">Can someone help me understand how it works in this example, and give some pointers to materials on the subject?</span></font></pre>

<pre><font face="Helvetica Neue, Helvetica, Arial, sans-serif" size="3"><span style="white-space:normal">The "tying the knot" article on the wiki is pretty mind bending too. </span></font></pre><pre><font face="Helvetica Neue, Helvetica, Arial, sans-serif" size="3"><span style="white-space:normal;background-color:rgba(255,255,255,0)"><span>-- | @'forever' act@ repeats the action infinitely.</span> </span></font></pre>

<pre><font face="Helvetica Neue, Helvetica, Arial, sans-serif" size="3"><span style="white-space:normal;background-color:rgba(255,255,255,0)"><a name="1432256ddf51cbdb_line-192"></a><span>forever</span>     <span>::</span> <span>(</span><span>Monad</span> <span>m</span><span>)</span> <span>=></span> <span>m</span> <span>a</span> <span>-></span> <span>m</span> <span>b</span> </span></font></pre>

<pre><font face="Helvetica Neue, Helvetica, Arial, sans-serif" size="3"><span style="white-space:normal;background-color:rgba(255,255,255,0)"></span></font><span style="white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium">{-# INLINE forever #-}</span><span style="background-color:rgba(255,255,255,0);white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium">
</span><a name="1432256ddf51cbdb_line-194" style="white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium"></a><span style="white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium">forever</span><span style="background-color:rgba(255,255,255,0);white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium"> </span><span style="white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium">a</span><span style="background-color:rgba(255,255,255,0);white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium">   </span><span style="white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium">=</span><span style="background-color:rgba(255,255,255,0);white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium"> </span><span style="white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium">let</span><span style="background-color:rgba(255,255,255,0);white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium"> </span><span style="white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium">a'</span><span style="background-color:rgba(255,255,255,0);white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium"> </span><span style="white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium">=</span><span style="background-color:rgba(255,255,255,0);white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium"> </span><span style="white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium">a</span><span style="background-color:rgba(255,255,255,0);white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium"> </span><span style="white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium">>></span><span style="background-color:rgba(255,255,255,0);white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium"> </span><span style="white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium">a'</span><span style="background-color:rgba(255,255,255,0);white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium"> </span><span style="white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium">in</span><span style="background-color:rgba(255,255,255,0);white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium"> </span><span style="white-space:normal;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:medium">a'</span></pre>

<pre>--</pre><pre>Eduardo Sato </pre>
</blockquote>