summaryrefslogtreecommitdiff
path: root/lambda-calcul
diff options
context:
space:
mode:
Diffstat (limited to 'lambda-calcul')
-rw-r--r--lambda-calcul/haskell/src/Minilang/Lambda.hs19
-rw-r--r--lambda-calcul/haskell/src/Minilang/REPL/Run.hs11
2 files changed, 18 insertions, 12 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/Lambda.hs b/lambda-calcul/haskell/src/Minilang/Lambda.hs
index 9d0f3cf..d2df56f 100644
--- a/lambda-calcul/haskell/src/Minilang/Lambda.hs
+++ b/lambda-calcul/haskell/src/Minilang/Lambda.hs
@@ -4,12 +4,14 @@ import Minilang.Lambda.DeBruijn (eval, fromDeBruijn, toDeBruijn)
import Minilang.Lambda.Eval (Env, Term)
import Minilang.Lambda.Infer (Context, TypeError, infer)
import Minilang.Lambda.Parser (AST, desugar)
-import Minilang.Lambda.Unify (Type)
+import Minilang.Lambda.Unify (Type (..))
+import Minilang.REPL.Types (Language (..))
-- | Top-level evaluator
-- Load an AST into given `Env` and `Context`, returning an extended
-- `Env` and `Context` with declarations bound
loadProgram ::
+ Language ->
AST ->
Env ->
Context ->
@@ -17,9 +19,14 @@ loadProgram ::
-- loadProgram (Let d r) ρ γ = do
-- (ρ', γ') <- checkD 0 d ρ γ
-- loadProgram r ρ' γ'
-loadProgram expr env context =
+loadProgram language expr env context =
let term = desugar expr
- in case infer term of
- Left typeError -> Left typeError
- Right typ ->
- Right (fromDeBruijn $ eval (toDeBruijn term), typ, env, context)
+ v = fromDeBruijn $ eval (toDeBruijn term)
+ in case language of
+ Typed ->
+ case infer term of
+ Left typeError -> Left typeError
+ Right typ ->
+ Right (v, typ, env, context)
+ Untyped ->
+ Right (v, TyVar "<?>", env, context)
diff --git a/lambda-calcul/haskell/src/Minilang/REPL/Run.hs b/lambda-calcul/haskell/src/Minilang/REPL/Run.hs
index 7dc8e81..37d4dd2 100644
--- a/lambda-calcul/haskell/src/Minilang/REPL/Run.hs
+++ b/lambda-calcul/haskell/src/Minilang/REPL/Run.hs
@@ -70,10 +70,9 @@ 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)) =
- trace ("selecting language " ++ show lang) $
- getEnv >>= \e ->
- setEnv (e {language = lang})
- >> output (Msg $ "Language set to " <> pack (show lang))
+ getEnv >>= \e ->
+ setEnv (e {language = lang})
+ >> output (Msg $ "Language set to " <> pack (show lang))
handleCommand Help =
output (Msg helpText)
@@ -82,11 +81,11 @@ loadProgramInEnv ::
Text ->
m ()
loadProgramInEnv prog = do
- repl@REPLEnv {env, context} <- getEnv
+ repl@REPLEnv {env, context, language} <- getEnv
case parse prog of
Left err -> output (Msg $ pack $ show err)
Right e -> do
- case loadProgram e env context of
+ case loadProgram language e env context of
Left typeError -> output (Msg $ pack $ show typeError)
Right (term, typ, env', context') -> do
setEnv (repl {env = env', context = context'})