[Haskell-cafe] Re: A guess on stack-overflows - thunks build-up
and tail recursion
Bas van Dijk
v.dijk.bas at gmail.com
Fri Mar 20 09:42:12 EDT 2009
On Fri, Mar 20, 2009 at 2:01 PM, GüŸnther Schmidt <gue.schmidt at web.de> 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
More information about the Haskell-Cafe
mailing list