summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs')
-rw-r--r--lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs8
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