summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/src/Minilang/Lambda/Infer.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang/Lambda/Infer.hs')
-rw-r--r--lambda-calcul/haskell/src/Minilang/Lambda/Infer.hs9
1 files changed, 7 insertions, 2 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/Lambda/Infer.hs b/lambda-calcul/haskell/src/Minilang/Lambda/Infer.hs
index 2052398..9f0df35 100644
--- a/lambda-calcul/haskell/src/Minilang/Lambda/Infer.hs
+++ b/lambda-calcul/haskell/src/Minilang/Lambda/Infer.hs
@@ -30,9 +30,14 @@ render :: TypeError -> Text
render (UnifyError ue) = Unify.render ue
fromTerm :: Eval.Term -> ATerm ()
-fromTerm (Eval.Var x) = Var x ()
+fromTerm (Eval.Var x) = Var x ()
fromTerm (Eval.Lam x body) = Lam x (fromTerm body) ()
-fromTerm (Eval.App a b) = App (fromTerm a) (fromTerm b) ()
+fromTerm (Eval.App a b) = App (fromTerm a) (fromTerm b) ()
+-- Literal values (Num, Str) are treated as typed by a fresh variable;
+-- the inferencer only needs to traverse the term structure, not inspect
+-- literal payloads.
+fromTerm (Eval.Num _) = Var "<num>" ()
+fromTerm (Eval.Str _) = Var "<str>" ()
infer :: Eval.Term -> Either TypeError Type
infer t = do