On Mon, 4 Mar 2002, Tom Pledger wrote: > Nguyen Phan Dung writes: > : > | mylist :: [Integer] > | mylist = [1..1000000000] > | > | In Hugs, I type mylist to print out all the elements inside. However, > | after printing about 22000 elements, the system crashs & outputs: > | "Garbage collection fails to reclaim sufficient memory" > > The declaration of mylist is a pattern binding, not a function binding > - see section 4.4.3 of the Haskell 98 report. > > What that means in this particular case is that the system saves the > result in case you want to use it again, rather than freeing the part > of the list it's already printed. > > Try typing [1..1000000000] at the Hugs prompt instead.
So would wrapping such possibly fiendish entities as [1..] with the "const" function and replacing all references to the toplevel binding with "(binding ())" make sure that the first part of the list could be thrown away and re-computed if needed? Or does one need to NOINLINE it as well? Example to make myself clear: mylist = const [1..1000000000] main = print (mylist ()) It seems like we had a discussion about something very similar to this a few months ago on some haskell.org list. Thanks, Jay Cox _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe
