
Hi, I do not have the answer to your question, but you might be interested in the video about streams by Graham Hutton: http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Graham-Hutton-How-To-B... Adrien On Mon, 23 Apr 2012 16:00:09 +1000, David Tchepak wrote:
Im currently reading the first edition of "Introduction to Functional Programming" by Richard Bird and Philip Wadler. Section 7.6 is on cyclic structures, and has the following example:
ones = forever 1 forever x = x : forever x
Which, after 5 evaluations, produces a graph like:
1 : 1 : 1 : 1 : 1 : forever 1
The book then has a re-written version of `forever` that looks like this:
forever x = zs where zs = x : zs
Which instead produces a cyclic structure:
* 1 : ^-----|
So it takes up a fixed amount of space, despite being an infinite list.
I was hoping someone could explain the difference between the first and second `forever`s for me. Does the second version become a cyclic graph because the `zs` intermediate expression has no additional arguments so doesnt need to be reduced further? Or do both end up being optimised the same by GHC? (my newbie attempts to profile show the second takes up a bit less space, but Im not sure if Im measuring it right).
Appreciate any help. Regards, David
-- Adrien Haxaire www.adrienhaxaire.org | @adrienhaxaire