summaryrefslogtreecommitdiff
path: root/src/CC/Term/Parse.idr
diff options
context:
space:
mode:
authorChloe Brown <chloe.brown.00@outlook.com>2023-03-25 17:13:16 +0000
committerChloe Brown <chloe.brown.00@outlook.com>2023-03-25 17:13:16 +0000
commit88ce0ee4ed72f75775da9c96668cad3e97554812 (patch)
tree3215beb5d715cd4ab9be5128ccbbe6cdfed796fa /src/CC/Term/Parse.idr
parent43463df9899d00f0f86c3b655b84a5d5ce75402d (diff)
Clean-up raw term constructors and parser.
Diffstat (limited to 'src/CC/Term/Parse.idr')
-rw-r--r--src/CC/Term/Parse.idr15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/CC/Term/Parse.idr b/src/CC/Term/Parse.idr
index cef4f0e..3615956 100644
--- a/src/CC/Term/Parse.idr
+++ b/src/CC/Term/Parse.idr
@@ -94,6 +94,9 @@ tokenMap =
parens : {b : Bool} -> Grammar state CCToken b ty -> Grammar state CCToken True ty
parens p = match TPOpen >> commit >> p >>= (\t => match TPClose *> commit *> pure t)
+parseIdent : Grammar state CCToken True Name
+parseIdent = MkName <$> (bounds $ match TIdent)
+
parseTerm : Grammar state CCToken True RawTerm
parseLambda : Grammar state CCToken True RawTerm
parseLet : Grammar state CCToken True RawTerm
@@ -105,17 +108,17 @@ parseTerm = parseLambda <|> parseLet <|> parseSpine
parseLambda = do
match TLambda
commit
- names <- sepBy1 (match TComma >> commit) (MkName <$> (bounds $ match TIdent))
+ names <- sepBy1 (match TComma >> commit) parseIdent
commit
match TFatArrow
commit
t <- parseTerm
- pure $ foldr1By RAbs (flip RAbs t) names
+ pure $ foldr1By Abs (flip Abs t) names
parseLet = do
match TLet
commit
- n <- bounds $ match TIdent
+ n <- parseIdent
commit
match TDef
commit
@@ -123,12 +126,12 @@ parseLet = do
match TSemi
commit
u <- parseTerm
- pure $ RLet (MkName n) t u
+ pure $ Let n t u
-parseSpine = foldl1 RApp <$> some parseAtom
+parseSpine = foldl1 App <$> some parseAtom
parseAtom =
- (RVar <$> MkName <$> (bounds $ match TIdent <* commit)) <|>
+ (Var <$> parseIdent <* commit) <|>
(parens parseTerm)
parseSrc : Grammar state CCToken True RawTerm