tricu/src/REPL.hs

40 lines
929 B
Haskell
Raw Normal View History

module REPL where
import Eval
import Lexer
import Parser
import Research
import Control.Monad (void)
import qualified Data.Map as Map
import System.IO (hFlush, stdout)
repl :: Map.Map String T -> IO ()
repl env = do
putStr "sapling < "
hFlush stdout
input <- getLine
case input of
":_exit" ->
putStrLn "Goodbye!"
"" -> do
2024-12-27 14:10:13 -06:00
putStrLn ""
repl env
_ -> do
let clearEnv = Map.delete "__result" env
newEnv = evalSingle clearEnv (parseSingle input)
case Map.lookup "__result" newEnv of
Just r -> do
putStrLn $ "sapling > " ++ show r
putStrLn $ "DECODE -: " ++ (decodeResult r)
Nothing -> pure ()
repl newEnv
decodeResult :: T -> String
decodeResult tc =
case ofString tc of
Right str -> "\"" ++ str ++ "\""
Left _ -> case ofNumber tc of
Right num -> "# " ++ show num
Left _ -> ""