Resolves issue with parsing comments
This commit is contained in:
30
src/REPL.hs
30
src/REPL.hs
@ -5,10 +5,12 @@ import Lexer
|
||||
import Parser
|
||||
import Research
|
||||
|
||||
import Control.Exception (SomeException, catch)
|
||||
import Control.Monad.IO.Class (liftIO)
|
||||
import Data.List (intercalate)
|
||||
import qualified Data.Map as Map
|
||||
import System.Console.Haskeline
|
||||
import System.IO (hFlush, stdout)
|
||||
|
||||
import qualified Data.Map as Map
|
||||
|
||||
repl :: Map.Map String T -> IO ()
|
||||
repl env = runInputT defaultSettings (loop env)
|
||||
@ -23,15 +25,25 @@ repl env = runInputT defaultSettings (loop env)
|
||||
outputStrLn ""
|
||||
loop env
|
||||
Just input -> do
|
||||
let clearEnv = Map.delete "__result" env
|
||||
newEnv = evalSingle clearEnv (parseSingle input)
|
||||
case Map.lookup "__result" newEnv of
|
||||
Just r -> do
|
||||
outputStrLn $ "tricu > " ++ show r
|
||||
outputStrLn $ "DECODE -: \"" ++ decodeResult r ++ "\""
|
||||
Nothing -> return ()
|
||||
newEnv <- liftIO $ (processInput env input `catch` errorHandler env)
|
||||
loop newEnv
|
||||
|
||||
processInput :: Map.Map String T -> String -> IO (Map.Map String T)
|
||||
processInput env input = do
|
||||
let clearEnv = Map.delete "__result" env
|
||||
newEnv = evalSingle clearEnv (parseSingle input)
|
||||
case Map.lookup "__result" newEnv of
|
||||
Just r -> do
|
||||
putStrLn $ "tricu > " ++ show r
|
||||
putStrLn $ "READ -: \"" ++ decodeResult r ++ "\""
|
||||
Nothing -> return ()
|
||||
return newEnv
|
||||
|
||||
errorHandler :: Map.Map String T -> SomeException -> IO (Map.Map String T)
|
||||
errorHandler env e = do
|
||||
putStrLn $ "Error: " ++ show e
|
||||
return env
|
||||
|
||||
decodeResult :: T -> String
|
||||
decodeResult tc = case toNumber tc of
|
||||
Right num -> show num
|
||||
|
Reference in New Issue
Block a user