summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/src/Minilang/REPL/Run.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang/REPL/Run.hs')
-rw-r--r--lambda-calcul/haskell/src/Minilang/REPL/Run.hs21
1 files changed, 14 insertions, 7 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/REPL/Run.hs b/lambda-calcul/haskell/src/Minilang/REPL/Run.hs
index 9c31987..2282b46 100644
--- a/lambda-calcul/haskell/src/Minilang/REPL/Run.hs
+++ b/lambda-calcul/haskell/src/Minilang/REPL/Run.hs
@@ -14,9 +14,10 @@ import Minilang.Lambda (loadProgram)
import Minilang.Lambda.DeBruijn (eval, fromDeBruijn, toDeBruijn)
import Minilang.Lambda.Eval (newEnv)
import Minilang.Lambda.Infer (infer, newContext)
+import qualified Minilang.Lambda.Infer as Infer
import Minilang.Lambda.Parser (desugar, parse)
+import Minilang.Lambda.Unify (Type (TyVar))
import Minilang.REPL.Types
-import qualified Minilang.Lambda.Infer as Infer
-- | Run a REPL session
runREPL ::
@@ -36,16 +37,21 @@ handleUserInput ::
Text ->
m ()
handleUserInput txt = do
- -- repl@REPLEnv {env, context, debugParser} <- getEnv
+ REPLEnv {language} <- getEnv
case parse txt of
Left err -> output (Msg $ pack $ show err)
Right expr -> do
let term = desugar expr
- case infer term of
- Left typeError -> output (Msg $ Infer.render typeError)
- Right typ -> do
- let v = fromDeBruijn $ eval (toDeBruijn term)
- output (Evaluated v typ)
+ v = fromDeBruijn $ eval (toDeBruijn term)
+ case language of
+ Typed ->
+ case infer term of
+ Left typeError -> output (Msg $ Infer.render typeError)
+ Right typ -> do
+ let
+ output (Evaluated v typ)
+ Untyped ->
+ output (Evaluated v (TyVar "<?>"))
handleCommand ::
(MonadCatch m, MonadREPL m) =>
@@ -63,6 +69,7 @@ handleCommand (Load (File file)) = do
handleCommand (Load (Data prog)) = loadProgramInEnv prog
handleCommand (Set (StepTypeChecker st)) = getEnv >>= \e -> setEnv (e {stepTypeCheck = st})
handleCommand (Set (DebugParser st)) = getEnv >>= \e -> setEnv (e {debugParser = st})
+handleCommand (Set (SelectLanguage lang)) = getEnv >>= \e -> setEnv (e {language = lang})
handleCommand Help =
output (Msg helpText)