diff options
| author | Rose Hogenson <rhogenson@posteo.net> | 2023-02-12 15:37:25 -0800 |
|---|---|---|
| committer | Rose Hogenson <rhogenson@posteo.net> | 2023-02-12 15:37:25 -0800 |
| commit | d940187fd8720e0ab3c00e5a6a7ae8f181c7752d (patch) | |
| tree | 69df829ae1e7fb9454008920b49db08489d939a6 /parser.sml | |
| parent | 5989629a7951e544ad4656672025a99ecd08c7c9 (diff) | |
| download | sml-d940187fd8720e0ab3c00e5a6a7ae8f181c7752d.tar.zst | |
Add lambda functions.
Diffstat (limited to 'parser.sml')
| -rw-r--r-- | parser.sml | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -428,7 +428,10 @@ struct bind orelseExpr (fn e2 => const (Syntax.EOrElse (e1, e2)))) <|> const e1) st - and expr : Syntax.expr parser = fn st => typedExp st + and handleExpr : Syntax.expr parser = fn st => orelseExpr st + and raiseExpr : Syntax.expr parser = fn st => handleExpr st + and fnExpr : Syntax.expr parser = fn st => ((reserved "fn" >> reserved "_" >> reserved "=>" >> Syntax.ELambda <$> expr) <|> raiseExpr) st + and expr : Syntax.expr parser = fn st => fnExpr st and dec : Syntax.dec parser = fn st => (reserved "val" >> reserved "_" >> reserved "=" >> Syntax.DVal <$> expr) st val program : Syntax.expr parser = (fn decs => Syntax.ELet (decs, Syntax.EInt 0)) <$> many dec |
