Advertisement
EeZotop

Untitled

Jan 6th, 2022
1,691
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module Main where
  2.  
  3. import System.Console.Haskeline
  4. import Text.Megaparsec.Error (errorBundlePretty)
  5. import HW3.Parser (parse)
  6. import HW3.Pretty (prettyValue)
  7. import HW3.Evaluator (eval)
  8.  
  9. main :: IO ()
  10. main = runInputT defaultSettings loop
  11.   where
  12.     loop :: InputT IO ()
  13.     loop = do
  14.       minput <- getInputLine "hi> "
  15.       case minput of
  16.         Nothing -> return ()
  17.         Just "exit" -> return ()
  18.         Just "quit" -> return ()
  19.         Just "q" -> return ()
  20.         Just input -> do
  21.           case parse input of
  22.             Left err -> outputStrLn $ errorBundlePretty err
  23.             Right expr -> do
  24.               mval <- eval expr
  25.               case mval of
  26.                 Left err -> outputStrLn $ show err
  27.                 Right val -> outputStrLn $ show $ prettyValue val
  28.           loop
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement