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