preliminary parser for data
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user