From a1965bf332d3259fb3e2e9d152a42ab37d61841e Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Sat, 8 Feb 2014 03:25:14 +1100 Subject: Added I/O to Thue interpreter --- Thue/Interpreter.hs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Thue/Interpreter.hs b/Thue/Interpreter.hs index 6022038..cbf58a4 100644 --- a/Thue/Interpreter.hs +++ b/Thue/Interpreter.hs @@ -11,7 +11,7 @@ import Parser -thue :: ThueProgram -> ThueState +thue :: ThueProgram -> IO ThueState thue program = let rules = thueRules program state = thueInitialState program @@ -21,17 +21,23 @@ thue program = -interpret :: ThueState -> [ThueRule] -> StdGen -> ThueState -interpret state rules gen = +interpret :: ThueState -> [ThueRule] -> StdGen -> IO ThueState +interpret state rules gen = do let possibleRules = rules `applicableTo` state ruleToApply = possibleRules !! num (num, gen') = nextInRange 0 (length possibleRules - 1) gen (before, after) = fromJust (extractInfix (original ruleToApply) state) - state' = before ++ (replacement ruleToApply) ++ after - in if (possibleRules == []) then state else interpret state' rules gen' + state' <- case (replacement ruleToApply) of + ":::" -> getLine >>= (\x -> return (before ++ x ++ after)) + + '~':xs -> putStrLn xs >> return (before ++ after) + + x -> return (before ++ x ++ after) + + if (possibleRules == []) then return state else interpret state' rules gen' -- cgit