Hi all, I was wondering if someone has written a tracer/debugger that shows you how a given Haskell expression is evaluated, by generating all the intermediate states of the expression until it is in normal form?
For instance, given the following code: > take' 0 xs = [] > take' n (x:xs) = x : take' (n-1) xs > exp = take' 2 [1,2,3,4,5,6] the trace of 'exp' would generate something like this: > exp = take' 2 [1,2,3,4,5,6] > exp = (\n (x:xs) -> x : take' (n-1) xs) 2 [1,2,3,4,5,6] > exp = 1 : take' (2-1) [2,3,4,5,6] > exp = 1 : take' 1 [2,3,4,5,6] > exp = 1 : (\n (x:xs) -> x : take' (n-1) xs) 1 [2,3,4,5,6] > exp = 1 : 2 : take' (1-1) [3,4,5,6] > exp = 1 : 2 : take' 0 [3,4,5,6] > exp = 1 : 2 : (\0 xs -> []) 0 [3,4,5,6] > exp = 1 : 2 : [] > exp = [1,2] That is, all the substitutions performed when evaluating 'exp' from left to right. I was thinking that something like this could be rather useful when teaching or learning Haskell. Thanks, Ulrik _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe