diff options
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs')
| -rw-r--r-- | lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs | 14 |
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 |
