[Haskell-cafe] Re: A guess on stack-overflows - thunks
build-up and tail recursion
Matthew Brecknell
haskell at brecknell.org
Fri Mar 20 10:45:28 EDT 2009
GüŸnther Schmidt wrote:
> the point I wanted to stress though is that the stack overflow does
> actually not occur doing the recursive algorithm, just a build-up of thunks.
You can also observe this with suitable "trace" statements. For example:
> import Debug.Trace
> import System.Environment
>
> my_foldl f z [] = trace "o" z
> my_foldl f z (x:xs) = trace "^" (my_foldl f (f z x) xs)
>
> my_plus x y = trace "+" (x + y)
>
> main = do
> [n] <- getArgs
> print (my_foldl my_plus 0 [1..read n])
Compile and execute with suitable options, including a reduced maximum
stack size. This works for me:
$ ghc --make stack.hs
$ ./stack 20 +RTS -K100
Also try the strict version:
> my_foldl' f z [] = trace "o" z
> my_foldl' f z (x:xs) = trace "^" (z' `seq` my_foldl' f z' xs)
> where z' = f z x
More information about the Haskell-Cafe
mailing list