summaryrefslogtreecommitdiffstats
path: root/parser.sml
diff options
context:
space:
mode:
Diffstat (limited to 'parser.sml')
-rw-r--r--parser.sml6
1 files changed, 5 insertions, 1 deletions
diff --git a/parser.sml b/parser.sml
index 3c044af..e4c7359 100644
--- a/parser.sml
+++ b/parser.sml
@@ -459,10 +459,14 @@ struct
<|> orelseExpr) st
and dec : Syntax.dec parser = fn st =>
(reserved "val" >>
+ bind (true <$ reserved "rec" <|> const false) (fn isRec =>
bind pat (fn p =>
reserved "=" >>
bind expr (fn e =>
- const (Syntax.DVal (p, e))))) st
+ const
+ (if isRec
+ then Syntax.DValRec (p, e)
+ else Syntax.DVal (p, e)))))) st
val program : Syntax.expr parser = (fn decs => Syntax.ELet (decs, Syntax.EInt 0)) <$> many dec
fun parse (f : string) : (string, Syntax.expr) Result.either = runParser program f