On 13-12-23 09:02 PM, Eduardo Sato wrote:
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.
To tell you the truth, I don't know how laziness works in general in haskell.
For lazy evaluation, see my http://www.vex.net/~trebla/haskell/lazy.xhtml The following produces and destroys 10 cons cells. Unless the compiler does smart things. main = print (take 10 (plenty 5)) plenty n = n : plenty n The following produces and reuses 1 cons cell. main = print (take 10 (plenty 5)) plenty n = s where s = n : s -- or, let s = n : s in s Reusing comes from sharing. Sharing comes from aliasing. Aliasing is using the same name s. Self-aliasing is then using the same name s on both sides of =. It is best to draw some diagrams. I am too lazy to do it here. But I did some in my lazy evaluation article, and it shows you how to do more on your own. forever is similar.
The "tying the knot" article on the wiki is pretty mind bending too.
Most authors on the haskell wiki are driven by excitement. The problem with excitement is that excited authors lose readers by telling too much and starting too high.