summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/test/Minilang
diff options
context:
space:
mode:
authorArnaud Bailly <arnaud@pankzsoft.com>2025-10-27 16:48:13 +0100
committerArnaud Bailly <arnaud@pankzsoft.com>2025-10-27 16:48:13 +0100
commitee93e3434ecb050f344b45d075e93429e8ebe22d (patch)
tree3985b1e005719f1fc851715238c3217cc5935796 /lambda-calcul/haskell/test/Minilang
parentb899a23e2db86a0a12c5de9ee82588819c1caf89 (diff)
downloadlambda-nantes-ee93e3434ecb050f344b45d075e93429e8ebe22d.tar.gz
Parse let expressions
Diffstat (limited to 'lambda-calcul/haskell/test/Minilang')
-rw-r--r--lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs8
1 files changed, 8 insertions, 0 deletions
diff --git a/lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs b/lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs
index 5d3e8ab..edd39df 100644
--- a/lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs
+++ b/lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs
@@ -58,6 +58,14 @@ spec = parallel $ do
in nestedApp term === ar
& counterexample ("Desugared term: " <> show term)
+ prop "parses a let-binding as a function application" $ \(Identifier ident) ->
+ forAll (genAst 3) $ \binding ->
+ forAll (genAst 2) $ \body ->
+ let fun = Abs [ident] body
+ app = App fun binding []
+ in parse ("(let (" <> ident <> " " <> pretty binding <> ") " <> pretty body <> ")")
+ `shouldBe` Right app
+
spine :: AST -> Int
spine = \case
App x y rest -> 1 + spine x + length rest