From: Matthijs Kooijman Date: Fri, 30 Jan 2009 09:10:41 +0000 (+0100) Subject: Show input on each simulation step. X-Git-Url: https://git.stderr.nl/gitweb?a=commitdiff_plain;h=a24cb7a8565b8b50f1ad6a5125406c3db3c4a004;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git Show input on each simulation step. --- diff --git a/Sim.hs b/Sim.hs index 0820d13..771896f 100644 --- a/Sim.hs +++ b/Sim.hs @@ -14,35 +14,37 @@ simulate f input s = do -- A circuit with input of type a, state of type s and output of type b type Circuit a s b = a -> s -> (s, b) -run :: Circuit a s b -> [a] -> s -> [(s, b)] +run :: Circuit a s b -> [a] -> s -> [(a, b, s)] run f (i:input) s = - (s', o): (run f input s') + (i, o, s'): (run f input s') where (s', o) = f i s run _ [] _ = [] -simulateIO :: (Read a, Show b, Show s) => Sim.Circuit a s b -> s -> IO() +simulateIO :: (Read a, Show a, Show b, Show s) => Sim.Circuit a s b -> s -> IO() simulateIO c s = do putStr "Initial State: " putStr $ show s putStr "\n\n" runIO c s -runIO :: (Read a, Show b, Show s) => Sim.Circuit a s b -> s -> IO() +runIO :: (Read a, Show a, Show b, Show s) => Sim.Circuit a s b -> s -> IO() runIO f s = do - putStr "\nInput: " + putStr "\nInput? " line <- getLine if (line == "") then return () else let i = (read line) in do let (s', o) = f i s in do - printOutput (s', o) + printOutput (i, o, s') simulateIO f s' -printOutput :: (Show s, Show o) => (s, o) -> IO () -printOutput (s, o) = do - putStr "Output: " +printOutput :: (Show i, Show o, Show s) => (i, o, s) -> IO () +printOutput (i, o, s) = do + putStr "Input: " + putStr $ show i + putStr "\nOutput: " putStr $ show o putStr "\nNew State: " putStr $ show s