From 1c4a175e00e727ac4987f60503bd7dbaeb3f26ad Mon Sep 17 00:00:00 2001 From: Arnaud Bailly Date: Tue, 28 Oct 2025 16:42:28 +0100 Subject: wip: use de Bruijn indices representation provide sample complex terms to evaluate --- lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (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 9ed4626..e52c981 100644 --- a/lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs +++ b/lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs @@ -75,16 +75,18 @@ letExpr = rpar ( do void $ lexeme "let" - (bind : binds) <- + bindings <- between lpar rpar (some binding) body <- ast - let fun = Abs (fst <$> (bind : binds)) body - return $ App fun (snd bind) (snd <$> binds) + return $ foldr mkLet body bindings ) +mkLet :: (Text, AST) -> AST -> AST +mkLet (var, bound) body = App (Abs [var] body) bound [] + binding :: Parser (Text, AST) binding = between -- cgit v1.3.1