sugar for data and other improvements

- parse types in let (everything but parser was there)
- add sugar for `data`
- move `joinBy` to prelude
- fix highlighting for char in vscode
- better errors for missing imports
This commit is contained in:
2024-12-28 09:24:30 -08:00
parent 0992dc1367
commit 3ec2f90770
17 changed files with 115 additions and 94 deletions

View File

@@ -93,14 +93,14 @@ fastReadFile fn = do
||| New style loader, one def at a time
processModule : String -> List String -> String -> M String
processModule base stk name = do
processModule : FC -> String -> List String -> String -> M String
processModule importFC base stk name = do
top <- get
let False := elem name top.loaded | _ => pure ""
modify { loaded $= (name::) }
let fn = if base == "" then name ++ ".newt" else base ++ "/" ++ name ++ ".newt"
Right src <- fastReadFile $ fn
| Left err => fail "error reading \{fn}: \{show err}"
| Left err => fail "ERROR at \{show importFC}: error reading \{fn}: \{show err}"
let Right toks = tokenise fn src
| Left err => fail (showError src err)
@@ -119,7 +119,7 @@ processModule base stk name = do
-- we could use `fc` if it had a filename in it
when (name' `elem` stk) $ error emptyFC "import loop \{show name} -> \{show name'}"
processModule base (name :: stk) name'
processModule fc base (name :: stk) name'
top <- get
mc <- readIORef top.metas
@@ -163,7 +163,7 @@ processFile fn = do
processDecl ["Prim"] (PType emptyFC "String" Nothing)
processDecl ["Prim"] (PType emptyFC "Char" Nothing)
src <- processModule dir [] name
src <- processModule emptyFC dir [] name
top <- get
-- dumpContext top