On Fri, Mar 20, 2009 at 2:01 PM, GüŸnther Schmidt <[email protected]> wrote:
> 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
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe