import System.IO import Parser.Core import Expr main = return () -- main = promptLoop [] -- -- promptLoop :: Context -> IO () -- promptLoop context = do -- line <- prompt -- if line /= "exit" -- then loop line context >>= promptLoop -- else return () -- -- loop :: String -> Context -> IO Context -- loop line context = do s <- parseIO line -- context <- printStatement s context -- putStrLn $ show context -- return context -- -- prompt :: IO String -- prompt = do putStr "> " -- hFlush stdout -- getLine -- -- parseIO :: String -> IO Statement -- parseIO input = case parseStrict statementP input of -- Nothing -> fail "Couldn't parse input" -- Just s -> return s -- -- printStatement :: Statement -> Context -> IO Context -- printStatement (SAssignment a) context = do putStrLn $ show a -- return $ update context a -- printStatement (SExpr e) context = do putStrLn evalStr -- return context -- where evalStr = case eval context e of Nothing -> "Couldn't evaluate expression" -- Just a -> show a