preliminary parser for data

This commit is contained in:
2023-04-10 21:48:36 -07:00
parent 60dc4c4f08
commit 0358f224ae
2 changed files with 14 additions and 8 deletions

View File

@@ -20,7 +20,6 @@ import Data.List
ident = token Ident ident = token Ident
parens : Parser a -> Parser a parens : Parser a -> Parser a
parens pa = do parens pa = do
sym "(" sym "("
@@ -33,12 +32,9 @@ lit = do
t <- token Number t <- token Number
pure $ Lit (LInt (cast t)) pure $ Lit (LInt (cast t))
export export
term : (Parser Term) term : (Parser Term)
-- ( t : ty ), (t , u) (t) -- ( t : ty ), (t , u) (t)
-- Or do we want (x : ty) I think we may need to annotate any term -- Or do we want (x : ty) I think we may need to annotate any term
parenThinger : Parser Term parenThinger : Parser Term
@@ -77,7 +73,6 @@ parseApp = do
rest <- many atom rest <- many atom
pure $ foldl App hd rest pure $ foldl App hd rest
parseOp : Lazy (Parser Term) parseOp : Lazy (Parser Term)
parseOp = parseApp >>= go 0 parseOp = parseApp >>= go 0
where where
@@ -96,7 +91,6 @@ parseOp = parseApp >>= go 0
go prec (App (App (Var op) left) right) go prec (App (App (Var op) left) right)
<|> pure left <|> pure left
export export
letExpr : Parser Term letExpr : Parser Term
letExpr = do letExpr = do
@@ -173,9 +167,21 @@ export
parseDef : Parser Decl parseDef : Parser Decl
parseDef = Def <$> ident <* keyword "=" <*> term parseDef = Def <$> ident <* keyword "=" <*> term
export
parseData : Parser Decl
parseData = do
keyword "data"
name <- ident
keyword ":"
ty <- term
keyword "where"
decls <- startBlock $ someSame $ parseSig
-- TODO - turn decls into something more useful
pure $ Data name ty decls
export export
parseDecl : Parser Decl parseDecl : Parser Decl
parseDecl = parseImport <|> parseSig <|> parseDef parseDecl = parseImport <|> parseSig <|> parseDef <|> parseData
export export
parseMod : Parser Module parseMod : Parser Module

View File

@@ -55,7 +55,7 @@ data Decl
= TypeSig Name TyTerm = TypeSig Name TyTerm
| Def Name Term | Def Name Term
| DImport Name | DImport Name
| Data Name Telescope (List ConstrDef) | Data Name Term (List Decl)
public export public export
record Module where record Module where