
On Fri, Mar 20, 2009 at 2:01 PM, GüŸnther Schmidt
The problem occurs when the result value is needed and thus the thunks need to be reduced, starting with the outermost, which can't be reduced without reducing the next one .... etc and it's these reduction steps that are pushed on the stack until its size cause a stack-overflow.
Oh yes of course! Indeed a foldl: foldl f z [] = z foldl f z (x:xs) = foldl f (z `f` x) xs Is compiled to: foldl f z xs = case xs of [] -> z (x:xs) -> let z' = f z x in foldl f z' x So the z' is allocated on the heap. So it turns out that in my " Foldr Foldl Foldl' " article the stack overflow message is listed to soon. It should actually be lised after the: ((((((0 + 1) + 2) + 3) + 4) + ...) + 999999) + 1000000 I will fix it when I get home from work and nobody has beat me to it. Thanks for pointing this out! regards, Bas