diff options
Diffstat (limited to 'lambda-calcul')
| -rw-r--r-- | lambda-calcul/haskell/src/Minilang/Lambda.hs | 19 | ||||
| -rw-r--r-- | lambda-calcul/haskell/src/Minilang/REPL/Run.hs | 11 |
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'}) |
