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.hs16
1 files changed, 10 insertions, 6 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/REPL/Run.hs b/lambda-calcul/haskell/src/Minilang/REPL/Run.hs
index 8b9b844..26f3cad 100644
--- a/lambda-calcul/haskell/src/Minilang/REPL/Run.hs
+++ b/lambda-calcul/haskell/src/Minilang/REPL/Run.hs
@@ -8,7 +8,7 @@ module Minilang.REPL.Run where
import Control.Monad.Catch
import Data.Text hiding (replicate)
-import Minilang.Lambda (loadProgram, evalInEnv)
+import Minilang.Lambda (loadProgram, evalInEnvWith)
import Minilang.Lambda.Eval (newEnv)
import Minilang.Lambda.Infer (extendContext, infer, newContext)
import qualified Minilang.Lambda.Infer as Infer
@@ -34,11 +34,11 @@ handleUserInput ::
Text ->
m ()
handleUserInput txt = do
- repl@REPLEnv {language, env, context} <- getEnv
+ repl@REPLEnv {language, evaluator, env, context} <- getEnv
case parse txt of
Left err -> output (Msg $ pack $ show err)
Right (Def ident body) -> do
- let v = evalInEnv env body
+ let v = evalInEnvWith evaluator env body
case language of
Typed ->
case infer v of
@@ -54,7 +54,7 @@ handleUserInput txt = do
setEnv $ repl {env = (ident, v) : env}
output (Defined ident (TyVar "<?>"))
Right expr -> do
- let v = evalInEnv env expr
+ let v = evalInEnvWith evaluator env expr
ast = resugar v
case language of
Typed ->
@@ -86,6 +86,10 @@ handleCommand (Set (SelectLanguage lang)) =
getEnv >>= \e ->
setEnv (e {language = lang})
>> output (Msg $ "Language set to " <> pack (show lang))
+handleCommand (Set (SelectEvaluator ev)) =
+ getEnv >>= \e ->
+ setEnv (e {evaluator = ev})
+ >> output (Msg $ "Evaluator set to " <> pack (show ev))
handleCommand Help =
output (Msg helpText)
@@ -94,11 +98,11 @@ loadProgramInEnv ::
Text ->
m ()
loadProgramInEnv prog = do
- repl@REPLEnv {env, context, language} <- getEnv
+ repl@REPLEnv {env, context, language, evaluator} <- getEnv
case parseProgram prog of
Left err -> output (Msg $ pack $ show err)
Right exprs -> do
- case loadProgram language env context exprs of
+ case loadProgram evaluator language env context exprs of
Left typeError -> output (Msg $ pack $ show typeError)
Right (results, env', context') -> do
setEnv (repl {env = env', context = context'})