
Is there any way to view the steps that a haskell program goes through step by step? I'm thinking something similar to what I've seen in things I've been reading. For example: foldl (+) 0 [1..10] => (0+1) => ((0+1)+2) => (((0+1)+2)+3) => etc. I've seen these sorts of line-by-line execution steps, but I was curious if there was any way to simply type in a function and its arguments and have ghci or hugs or something print out this sort of visual representation of what's going on. Anyone know of something like this?

On 8/16/07, Ian Duncan
Is there any way to view the steps that a haskell program goes through step by step? I'm thinking something similar to what I've seen in things I've been reading. For example: foldl (+) 0 [1..10] => (0+1) => ((0+1)+2) => (((0+1)+2)+3) => etc. I've seen these sorts of line-by-line execution steps, but I was curious if there was any way to simply type in a function and its arguments and have ghci or hugs or something print out this sort of visual representation of what's going on. Anyone know of something like this?
You probably want to check out Hat: http://www.haskell.org/hat/ I've only used it a bit myself but I think it provides some of the features you're looking for. -Brent

hartthoma@linuxpt:~>cat test.hs
import Debug.Trace
foo = foldl (\first second ->
(trace ( "first: " ++ ( show first) ) first)
+
(trace ( "second: " ++ (show second) ) second) ) 0 [1,2,3]
bar = foldl (+)
traceIt x = trace ("\nTraceIt:\n"++show x++"\n") x
hartthoma@linuxpt:~>ghc -e foo test.hs
first: 0
second: 1
first: 1
second: 2
first: 3
second: 3
6
hartthoma@linuxpt:~>
hope this helps.
Ian Duncan

or actually just...
hartthoma@linuxpt:~>cat test.hs
import Debug.Trace
foo = foldl (\first second ->
trace ( ( show first) ++ ("+") ++ (show second ) )
( first + second) ) 0 [1,2,3]
hartthoma@linuxpt:~>ghc -e foo test.hs
0+1
1+2
3+3
6
hartthoma@linuxpt:~>
is probably better
Thomas Hartman
participants (3)
-
Brent Yorgey
-
Ian Duncan
-
Thomas Hartman