summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs
diff options
context:
space:
mode:
authorArnaud Bailly <arnaud@pankzsoft.com>2025-10-17 16:49:32 +0200
committerArnaud Bailly <arnaud@pankzsoft.com>2025-10-17 16:49:32 +0200
commit3b20f8a9e85696b86f698e1bdbdbd31b786b77c2 (patch)
tree3f8f7bbc3df51c1313fc9d1796b9650a76024d40 /lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs
parentdee78cba2ec18da811fd6f0499efe1bd27ad34e5 (diff)
downloadlambda-nantes-3b20f8a9e85696b86f698e1bdbdbd31b786b77c2.tar.gz
feat: parses single application
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs')
-rw-r--r--lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs11
1 files changed, 9 insertions, 2 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs b/lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs
index 8e97d46..e60d761 100644
--- a/lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs
+++ b/lambda-calcul/haskell/src/Minilang/Lambda/Parser.hs
@@ -13,7 +13,7 @@ type Parser = Parsec Void Text
data ParseError = ParseError Text
deriving (Eq, Show)
-data AST = Sym Text | Abs [Text] AST
+data AST = Sym Text | Abs [Text] AST | App AST AST
deriving (Eq, Show)
parse :: Text -> Either ParseError AST
@@ -21,7 +21,14 @@ parse =
first (ParseError . pack . errorBundlePretty) . Text.Megaparsec.parse ast ""
ast :: Parser AST
-ast = try lambda <|> try sym
+ast = try lambda <|> try sym <|> try app
+
+app :: Parser AST
+app =
+ between
+ lpar
+ rpar
+ (App <$> ast <*> ast)
lambda :: Parser AST
lambda =