2019-08-15 10:42:24 -07:00
|
|
|
module Main where
|
|
|
|
|
|
|
|
import Control.Monad (forever)
|
2019-08-29 20:46:42 -07:00
|
|
|
import Data.Type.Nat (Nat (Z))
|
2019-08-15 10:42:24 -07:00
|
|
|
import System.IO (hFlush, stdout)
|
2019-08-29 20:46:42 -07:00
|
|
|
import LambdaCalculus.Evaluation.Optimal (eval)
|
|
|
|
import LambdaCalculus.Parser (parse)
|
|
|
|
import LambdaCalculus.Representation (convert)
|
|
|
|
import LambdaCalculus.Representation.Dependent.ReverseDeBruijn (Expression)
|
2019-08-15 10:42:24 -07:00
|
|
|
|
|
|
|
prompt :: String -> IO String
|
|
|
|
prompt text = do
|
|
|
|
putStr text
|
|
|
|
hFlush stdout
|
|
|
|
getLine
|
|
|
|
|
|
|
|
main :: IO ()
|
2019-08-29 20:46:42 -07:00
|
|
|
main = forever $ parse "stdin" <$> prompt ">> " >>= \case
|
2019-08-17 00:01:23 -07:00
|
|
|
Left parseError -> putStrLn $ "Parse error: " ++ show parseError
|
2019-08-29 20:46:42 -07:00
|
|
|
Right expr -> do print expr; print $ eval (convert expr :: Expression 'Z)
|