
Hi , With help I got the following to print out each step in the evaluation of the add. However I was just wondering if it was possible to make the evaluation go back one step at a time. I tried to use a get count function but this doesnt seem so easy. data Expression = Val Integer | Add Expression Expression | Subtract Expression Expression | Multiply Expression Expression | Divide Expression Expression deriving Show demo1 = (Add(Add(Add(Add(Val 6)(Val 5))(Val 10))(Val 7))(Val 30)) evalStep :: Expression -> Expression evalStep (Val x)= (Val x) evalStep (Add x y) = case x of (Val a) -> case y of (Val b) -> Val (a+b) left -> Add x (evalStep y) right -> Add (evalStep x)y evaluate :: Expression -> IO () -- Base case evaluate (Val a) = return () -- Recursive case evaluate e = do putStrLn "Evaluating one more step" let e' = (evalStep e) putStrLn ("Result is "++(show e')) putStrLn "Do another step (y/n)? :" c <- getLine if (c=="y")then evaluate e' else putStrLn("Ok you said" ++ show[c] ++ "so that's it" ++ show getCount) getCount:: Expression -> Int getCount e' = n, n=1 if(getCount == 1) then putStrLn ("Cannot go back") else putStrLn ("One step back" ++ show n-1) All thoughts welcome! john