diff options
| author | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-10-28 18:34:16 +0100 |
|---|---|---|
| committer | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-10-28 18:48:27 +0100 |
| commit | a210419fd60c00d011f70fb1b968031621e4c01a (patch) | |
| tree | 68e7f8891970c230a63755e7714bb6f66f00a99d /lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs | |
| parent | 1c4a175e00e727ac4987f60503bd7dbaeb3f26ad (diff) | |
| download | lambda-nantes-a210419fd60c00d011f70fb1b968031621e4c01a.tar.gz | |
Provide function to go back from a deBruijn term to an AST
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 |
