summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs')
-rw-r--r--lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs14
1 files changed, 14 insertions, 0 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs b/lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs
index e52c981..fd02ebe 100644
--- a/lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs
+++ b/lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs
@@ -37,6 +37,20 @@ desugar = \case
(Eval.App (desugar x) (desugar y))
rest
+resugar :: Term -> AST
+resugar = \case
+ Eval.Var s -> Sym s
+ Eval.Lam x body -> case resugar body of
+ Abs vars ast -> Abs (x : vars) ast
+ other -> Abs [x] other
+ Eval.App l r -> case resugar l of
+ App f a rest -> App f a (rest ++ [r'])
+ where
+ r' = resugar r
+ other -> App other r' []
+ where
+ r' = resugar r
+
pretty :: AST -> Text
pretty = \case
Sym symb -> symb