add lambda syntax
This commit is contained in:
parent
330f474709
commit
19aa9410fb
1 changed files with 12 additions and 0 deletions
12
parser.hs
12
parser.hs
|
@ -117,6 +117,17 @@ funDef = do
|
||||||
body <- exprparser
|
body <- exprparser
|
||||||
return $ Defun name $ Lambda [(pat, body)]
|
return $ Defun name $ Lambda [(pat, body)]
|
||||||
|
|
||||||
|
lambda = do
|
||||||
|
symbol "\\"
|
||||||
|
pats <- patterns
|
||||||
|
let pat = (case pats of
|
||||||
|
[] -> UnitP
|
||||||
|
[a] -> a
|
||||||
|
otherwise -> TupleP pats)
|
||||||
|
symbol "->"
|
||||||
|
body <- exprparser
|
||||||
|
return $ Lambda [(pat, body)]
|
||||||
|
|
||||||
call = do
|
call = do
|
||||||
name <- identifier
|
name <- identifier
|
||||||
whiteSpace
|
whiteSpace
|
||||||
|
@ -156,6 +167,7 @@ def = do
|
||||||
expr' = try block
|
expr' = try block
|
||||||
<|> try funDef
|
<|> try funDef
|
||||||
<|> try call
|
<|> try call
|
||||||
|
<|> try lambda
|
||||||
<|> try (emptyTuple TupleConst)
|
<|> try (emptyTuple TupleConst)
|
||||||
<|> try (tupleSeq exprparser TupleConst)
|
<|> try (tupleSeq exprparser TupleConst)
|
||||||
<|> parens exprparser
|
<|> parens exprparser
|
||||||
|
|
Loading…
Reference in a new issue