2019-08-15 10:42:24 -07:00
|
|
|
module Main where
|
|
|
|
|
|
|
|
import Control.Monad (forever)
|
2019-12-11 19:21:54 -08:00
|
|
|
import Data.Text
|
|
|
|
import qualified Data.Text.IO as TIO
|
2020-11-03 13:29:59 -08:00
|
|
|
import LambdaCalculus (eagerEval)
|
2019-12-11 18:29:28 -08:00
|
|
|
import LambdaCalculus.Parser (parseExpression)
|
2019-08-15 10:42:24 -07:00
|
|
|
import System.IO (hFlush, stdout)
|
|
|
|
|
2019-12-11 19:21:54 -08:00
|
|
|
prompt :: Text -> IO Text
|
2019-08-15 10:42:24 -07:00
|
|
|
prompt text = do
|
2019-12-11 19:21:54 -08:00
|
|
|
TIO.putStr text
|
2019-08-15 10:42:24 -07:00
|
|
|
hFlush stdout
|
2019-12-11 19:21:54 -08:00
|
|
|
TIO.getLine
|
2019-08-15 10:42:24 -07:00
|
|
|
|
|
|
|
main :: IO ()
|
2019-12-11 18:29:28 -08:00
|
|
|
main = forever $ parseExpression <$> prompt ">> " >>= \case
|
2019-08-17 00:01:23 -07:00
|
|
|
Left parseError -> putStrLn $ "Parse error: " ++ show parseError
|
2020-11-02 15:59:35 -08:00
|
|
|
Right expr -> print $ eagerEval expr
|