import Debug.Trace

-- Simple Debugging with trace
         
fib'' :: Int -> Int
fib'' 0 = trace "Step 0 " 0
fib'' 1 = trace "Step 1 " 1
fib'' n = trace ("Step " ++ show n) (fib'' (n - 1) + fib'' (n - 2))

numList n = n : numList (n + 1)

memoized_fib' :: Int -> Integer
memoized_fib' = (map fib' (numList 0) !!)
   where fib' 0 = trace "Step 0" 0
         fib' 1 = trace "Step 1" 1
         fib' n = trace ("Step " ++ show n) (memoized_fib' (n-2) + memoized_fib' (n-1))

-- Simple IO example

repl :: IO ()
repl = do c <- getChar;
          putChar c     

--- do var_name <- exp; function using var_name
