From a210419fd60c00d011f70fb1b968031621e4c01a Mon Sep 17 00:00:00 2001 From: Arnaud Bailly Date: Tue, 28 Oct 2025 18:34:16 +0100 Subject: Provide function to go back from a deBruijn term to an AST --- lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs') 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 -- cgit v1.3.1