diff options
-rw-r--r-- | src/Thue/Interpreter.hs | 4 | ||||
-rw-r--r-- | src/Thue/Parser.hs | 18 |
2 files changed, 17 insertions, 5 deletions
diff --git a/src/Thue/Interpreter.hs b/src/Thue/Interpreter.hs index c53bff9..7c41718 100644 --- a/src/Thue/Interpreter.hs +++ b/src/Thue/Interpreter.hs @@ -34,9 +34,9 @@ interpret state rules gen = do (before, after) = fromJust (extractInfix (original ruleToApply) state) state' <- case (replacement ruleToApply) of - ":::" -> getLine >>= (\x -> return (before ++ x ++ after)) + ":::" -> getLine >>= return . toThueState >>= (\x -> return (before ++ x ++ after)) - '~':xs -> putStr xs >> return (before ++ after) + '~':xs -> return (fromThueState xs) >>= putStr >> return (before ++ after) x -> return (before ++ x ++ after) diff --git a/src/Thue/Parser.hs b/src/Thue/Parser.hs index 2ee41ae..10e9334 100644 --- a/src/Thue/Parser.hs +++ b/src/Thue/Parser.hs @@ -3,7 +3,9 @@ module Thue.Parser ( ThueRule(..), ThueState, - parseThue + parseThue, + toThueState, + fromThueState ) where import Control.Applicative( some ) @@ -31,6 +33,16 @@ parseThue = parse thue "error" +toThueState :: String -> ThueState +toThueState = id + + + +fromThueState :: ThueState -> String +fromThueState = id + + + thue = do rs <- many rule @@ -58,7 +70,7 @@ initialState = do return (concat s) -ruleState = some ruleStateChar +ruleState = some ruleStateChar >>= return . toThueState ruleStateChar = noneOf "\n\r:" @@ -66,7 +78,7 @@ ruleStateChar = noneOf "\n\r:" <?> "state character" -state = many stateChar +state = many stateChar >>= return . toThueState stateChar = noneOf "\n\r" |