Visible infix info from imports

This commit is contained in:
2024-10-22 22:08:34 -07:00
parent 19b42d72e5
commit fe323618e7
8 changed files with 79 additions and 60 deletions

View File

@@ -90,6 +90,10 @@ parseApp = do
rest <- many pArg
pure $ foldl (\a, (icit,fc,b) => RApp fc a b icit) hd rest
lookup : String -> List OpDef -> Maybe OpDef
lookup _ [] = Nothing
lookup name (op :: ops) = if op.name == name then Just op else lookup name ops
parseOp : Parser Raw
parseOp = parseApp >>= go 0
where
@@ -100,7 +104,7 @@ parseOp = parseApp >>= go 0
op <- token Oper
ops <- getOps
let op' = "_" ++ op ++ "_"
let Just (p,fix) = lookup op' ops
let Just (MkOp _ p fix) = lookup op' ops
-- this is eaten, but we need `->` and `:=` to not be an operator to have fatal here
| Nothing => case op of
-- Location is poor on these because we pull off of the remaining token list...
@@ -320,12 +324,21 @@ export
parseDecl : Parser Decl
parseDecl = parseMixfix <|> parsePType <|> parsePFunc <|> parseNorm <|> parseData <|> (try $ parseSig) <|> parseDef
export
parseModHeader : Parser String
parseModHeader = sameLevel (keyword "module") >> uident
export
parseImports : Parser (List Import)
parseImports = manySame $ parseImport
export
parseMod : Parser Module
parseMod = do
keyword "module"
name <- uident
startBlock $ do
keyword "module"
name <- uident
imports <- manySame $ parseImport
decls <- manySame $ parseDecl
pure $ MkModule name imports decls