diff options
| author | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-10-28 16:42:28 +0100 |
|---|---|---|
| committer | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-10-28 16:42:28 +0100 |
| commit | 1c4a175e00e727ac4987f60503bd7dbaeb3f26ad (patch) | |
| tree | 2f25f43036aa9434b77cb0ea1266118288755460 /lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs | |
| parent | 1eee551ed24b58ba64d54ea19ffaab1b2821a459 (diff) | |
| download | lambda-nantes-1c4a175e00e727ac4987f60503bd7dbaeb3f26ad.tar.gz | |
wip: use de Bruijn indices representation
provide sample complex terms to evaluate
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs')
| -rw-r--r-- | lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs | 8 |
1 files changed, 5 insertions, 3 deletions
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 |
