cleanup a little bit
This commit is contained in:
18
TODO.md
18
TODO.md
@@ -1,17 +1,27 @@
|
|||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
|
- [ ] redo code to determine base path
|
||||||
|
- [ ] save/load results of processing a module
|
||||||
|
- [ ] keep each module separate in context
|
||||||
|
- search would include imported modules, collect ops into and from modules
|
||||||
|
- should I allow the idris assignment hack?
|
||||||
|
- >>> sort out metas (maybe push them up to the main list)
|
||||||
|
- eventually we may want to support resuming halfway through a file
|
||||||
|
|
||||||
- [x] get port to run
|
- [x] get port to run
|
||||||
- [ ] something goes terribly wrong with traverse_ and for_ (related to erasure, I think)
|
- [x] something goes terribly wrong with traverse_ and for_ (related to erasure, I think)
|
||||||
- [ ] sort through issues that came up during port
|
- [ ] sort through issues that came up during port
|
||||||
- [ ] don't use `take` - it's not stack safe
|
- [x] ~~don't use `take` - it's not stack safe~~ The newt version is stack safe
|
||||||
|
- [ ] move idris version into a bootstrap directory
|
||||||
|
- (Need Idris/chez or newt-in-newt to bootstrap!)
|
||||||
|
|
||||||
More comments in code! This is getting big enough that I need to re-find my bearings when fixing stuff.
|
More comments in code! This is getting big enough that I need to re-find my bearings when fixing stuff.
|
||||||
|
|
||||||
- [ ] report info in case of error
|
- [ ] report info in case of error
|
||||||
- [x] tokenizer that can be ported to newt
|
- [x] tokenizer that can be ported to newt
|
||||||
- [ ] Add default path for library, so we don't need symlinks everywhere and can write tests for the library
|
- [ ] Add default path for library, so we don't need symlinks everywhere and can write tests for the library
|
||||||
- [ ] string interpolation?
|
- [x] string interpolation?
|
||||||
- The tricky part here is the `}` - I need to run the normal tokenizer in a way that treats `}` specially.
|
- The tricky part here is the `}` - I need to run the normal tokenizer in a way that treats `}` specially.
|
||||||
- Idris handles `putStrLn "done \{ show $ add {x=1} 2}"` - it recurses for `{` `}` pairs. Do we want that complexity?
|
- Idris handles `putStrLn "done \{ show $ add {x=1} 2}"` - it recurses for `{` `}` pairs. Do we want that complexity?
|
||||||
- The mini version would be recurse on `{`, pop on `}` (and expect caller to handle), fail if we get to the top with a tokens remaining.
|
- The mini version would be recurse on `{`, pop on `}` (and expect caller to handle), fail if we get to the top with a tokens remaining.
|
||||||
@@ -41,7 +51,7 @@ More comments in code! This is getting big enough that I need to re-find my bear
|
|||||||
- [x] syntax for negative integers
|
- [x] syntax for negative integers
|
||||||
- [ ] White box tests in `test` directory (I can't get this to work right with pack et al)
|
- [ ] White box tests in `test` directory (I can't get this to work right with pack et al)
|
||||||
- [x] Put worker in iframe on safari
|
- [x] Put worker in iframe on safari
|
||||||
- [ ] Warnings or errors for missing definitions
|
- [ ] Warnings or errors for missing definitions (e.g. on `Axiom` in codegen)
|
||||||
- [ ] Add the type name to dcon so confusion detection in case split is simpler
|
- [ ] Add the type name to dcon so confusion detection in case split is simpler
|
||||||
- [ ] Warnings or errors for unused cases
|
- [ ] Warnings or errors for unused cases
|
||||||
- This is important when misspelled constructors become pattern vars
|
- This is important when misspelled constructors become pattern vars
|
||||||
|
|||||||
@@ -185,15 +185,14 @@ instance Traversable List where
|
|||||||
traverse f Nil = return Nil
|
traverse f Nil = return Nil
|
||||||
traverse f (x :: xs) = return _::_ <*> f x <*> traverse f xs
|
traverse f (x :: xs) = return _::_ <*> f x <*> traverse f xs
|
||||||
|
|
||||||
-- something goes madly wrong with erasure in here.
|
traverse_ : ∀ t f a b. {{Traversable t}} {{Applicative f}} → (a → f b) → t a → f Unit
|
||||||
-- traverse_ : ∀ t f a b. {{Traversable t}} {{Applicative f}} → (a → f b) → t a → f Unit
|
traverse_ f xs = return (const MkUnit) <*> traverse f xs
|
||||||
-- traverse_ f xs = return (const MkUnit) <*> traverse f xs
|
|
||||||
|
|
||||||
for : {t : U → U} {f : U → U} → {{Traversable t}} {{appf : Applicative f}} → {a : U} → {b : U} → t a → (a → f b) → f (t b)
|
for : {t : U → U} {f : U → U} → {{Traversable t}} {{appf : Applicative f}} → {a : U} → {b : U} → t a → (a → f b) → f (t b)
|
||||||
for stuff fun = traverse fun stuff
|
for stuff fun = traverse fun stuff
|
||||||
|
|
||||||
-- for_ : {t : U → U} {f : U → U} → {{Traversable t}} {{appf : Applicative f}} → {a : U} → {b : U} → t a → (a → f b) → f Unit
|
for_ : {t : U → U} {f : U → U} → {{Traversable t}} {{appf : Applicative f}} → {a : U} → {b : U} → t a → (a → f b) → f Unit
|
||||||
-- for_ stuff fun = return (const MkUnit) <*> traverse fun stuff
|
for_ stuff fun = return (const MkUnit) <*> traverse fun stuff
|
||||||
|
|
||||||
instance Applicative Maybe where
|
instance Applicative Maybe where
|
||||||
return a = Just a
|
return a = Just a
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
module Data.Fin
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
module Data.List
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
module Data.Maybe
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
module Data.Nat
|
|
||||||
@@ -1,11 +1,7 @@
|
|||||||
module Data.String
|
module Data.String
|
||||||
|
|
||||||
|
|
||||||
import Prelude
|
import Prelude
|
||||||
|
|
||||||
class Interpolation a where
|
|
||||||
interpolate : a → String
|
|
||||||
|
|
||||||
unwords : List String → String
|
unwords : List String → String
|
||||||
unwords stuff = joinBy " " stuff
|
unwords stuff = joinBy " " stuff
|
||||||
|
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
module Data.Vect
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
module Hello
|
|
||||||
|
|
||||||
import Prelude
|
|
||||||
|
|
||||||
main : IO Unit
|
|
||||||
main = do
|
|
||||||
putStrLn "hello, world"
|
|
||||||
@@ -2,7 +2,6 @@ module Lib.Common
|
|||||||
|
|
||||||
import Data.String
|
import Data.String
|
||||||
import Data.Int
|
import Data.Int
|
||||||
import Data.Maybe
|
|
||||||
import Data.SortedMap
|
import Data.SortedMap
|
||||||
|
|
||||||
-- l is environment size, this works for both lvl2ix and ix2lvl
|
-- l is environment size, this works for both lvl2ix and ix2lvl
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import Lib.Prettier
|
|||||||
import Lib.CompileExp
|
import Lib.CompileExp
|
||||||
import Lib.TopContext
|
import Lib.TopContext
|
||||||
import Data.String
|
import Data.String
|
||||||
import Data.Maybe
|
|
||||||
import Data.Int
|
import Data.Int
|
||||||
|
|
||||||
data StKind = Plain | Return | Assign String
|
data StKind = Plain | Return | Assign String
|
||||||
|
|||||||
@@ -7,17 +7,13 @@
|
|||||||
-- I could make names unique (e.q. on lambdas), but I might want that to vary per backend?
|
-- I could make names unique (e.q. on lambdas), but I might want that to vary per backend?
|
||||||
module Lib.CompileExp
|
module Lib.CompileExp
|
||||||
|
|
||||||
import Data.List
|
|
||||||
|
|
||||||
import Lib.Types -- Name / Tm
|
import Lib.Types -- Name / Tm
|
||||||
import Lib.TopContext
|
import Lib.TopContext
|
||||||
import Lib.Prettier
|
import Lib.Prettier
|
||||||
import Lib.Util
|
import Lib.Util
|
||||||
|
|
||||||
|
|
||||||
CExp : U
|
CExp : U
|
||||||
|
|
||||||
|
|
||||||
data CAlt : U where
|
data CAlt : U where
|
||||||
CConAlt : String -> List String -> CExp -> CAlt
|
CConAlt : String -> List String -> CExp -> CAlt
|
||||||
-- REVIEW keep var name?
|
-- REVIEW keep var name?
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ module Lib.Elab
|
|||||||
|
|
||||||
import Lib.Parser.Impl
|
import Lib.Parser.Impl
|
||||||
import Lib.Prettier
|
import Lib.Prettier
|
||||||
import Data.List
|
|
||||||
import Data.String
|
import Data.String
|
||||||
import Data.IORef
|
import Data.IORef
|
||||||
import Lib.Types
|
import Lib.Types
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
module Lib.Erasure
|
module Lib.Erasure
|
||||||
|
|
||||||
import Lib.Types
|
import Lib.Types
|
||||||
import Data.Maybe
|
|
||||||
import Data.SnocList
|
import Data.SnocList
|
||||||
import Lib.TopContext
|
import Lib.TopContext
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,7 @@ import Lib.Types
|
|||||||
import Lib.TopContext
|
import Lib.TopContext
|
||||||
|
|
||||||
import Data.IORef
|
import Data.IORef
|
||||||
import Data.Fin
|
|
||||||
import Data.List
|
|
||||||
import Data.SnocList
|
import Data.SnocList
|
||||||
import Data.Vect
|
|
||||||
import Data.SortedMap
|
import Data.SortedMap
|
||||||
|
|
||||||
|
|
||||||
@@ -252,7 +249,7 @@ nfv env t = eval env CBV t >>= quote (length' env)
|
|||||||
prvalCtx : {{ctx : Context}} -> Val -> M String
|
prvalCtx : {{ctx : Context}} -> Val -> M String
|
||||||
prvalCtx {{ctx}} v = do
|
prvalCtx {{ctx}} v = do
|
||||||
tm <- quote ctx.lvl v
|
tm <- quote ctx.lvl v
|
||||||
pure $ interpolate $ pprint (map fst ctx.types) tm
|
pure $ render 90 $ pprint (map fst ctx.types) tm
|
||||||
|
|
||||||
-- REVIEW - might be easier if we inserted the meta without a bunch of explicit App
|
-- REVIEW - might be easier if we inserted the meta without a bunch of explicit App
|
||||||
-- I believe Kovacs is doing that.
|
-- I believe Kovacs is doing that.
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ module Lib.Parser
|
|||||||
|
|
||||||
-- NOW Still working on this.
|
-- NOW Still working on this.
|
||||||
|
|
||||||
import Data.Maybe
|
|
||||||
import Data.String
|
import Data.String
|
||||||
import Lib.Parser.Impl
|
import Lib.Parser.Impl
|
||||||
import Lib.Syntax
|
import Lib.Syntax
|
||||||
|
|||||||
@@ -2,9 +2,7 @@
|
|||||||
-- https://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf
|
-- https://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf
|
||||||
module Lib.Prettier
|
module Lib.Prettier
|
||||||
|
|
||||||
import Data.String
|
|
||||||
import Data.Int
|
import Data.Int
|
||||||
import Data.Maybe
|
|
||||||
|
|
||||||
-- `Doc` is a pretty printing document. Constructors are private, use
|
-- `Doc` is a pretty printing document. Constructors are private, use
|
||||||
-- methods below. `Alt` in particular has some invariants on it, see paper
|
-- methods below. `Alt` in particular has some invariants on it, see paper
|
||||||
@@ -150,7 +148,3 @@ fill (x :: y :: xs) = Alt (flatten x <+> fill (flatten y :: xs)) (x </> fill (y
|
|||||||
commaSep : List Doc -> Doc
|
commaSep : List Doc -> Doc
|
||||||
commaSep = folddoc (\a b => a ++ text "," <+/> b)
|
commaSep = folddoc (\a b => a ++ text "," <+/> b)
|
||||||
|
|
||||||
-- If we stick Doc into a String, try to avoid line-breaks via `flatten`
|
|
||||||
|
|
||||||
instance Interpolation Doc where
|
|
||||||
interpolate = render 80 ∘ flatten
|
|
||||||
|
|||||||
@@ -2,9 +2,6 @@ module Lib.ProcessDecl
|
|||||||
|
|
||||||
import Data.IORef
|
import Data.IORef
|
||||||
import Data.String
|
import Data.String
|
||||||
import Data.Vect
|
|
||||||
import Data.List
|
|
||||||
import Data.Maybe
|
|
||||||
|
|
||||||
import Lib.Elab
|
import Lib.Elab
|
||||||
import Lib.Parser
|
import Lib.Parser
|
||||||
@@ -78,7 +75,7 @@ logMetas mstart = do
|
|||||||
matches <- findMatches ctx ty $ map snd $ toList top.defs
|
matches <- findMatches ctx ty $ map snd $ toList top.defs
|
||||||
-- TODO try putting mc into TopContext for to see if it gives better terms
|
-- TODO try putting mc into TopContext for to see if it gives better terms
|
||||||
pure $ (" \{show $ length' matches} Solutions: \{show matches}" :: Nil)
|
pure $ (" \{show $ length' matches} Solutions: \{show matches}" :: Nil)
|
||||||
-- pure $ " \{show $ length' matches} Solutions:" :: map ((" " ++) ∘ interpolate ∘ pprint (names ctx) ∘ fst) matches
|
-- pure $ " \{show $ length' matches} Solutions:" :: map ((" " ++) ∘ render 90 ∘ pprint (names ctx) ∘ fst) matches
|
||||||
|
|
||||||
_ => pure Nil
|
_ => pure Nil
|
||||||
info fc $ unlines ((msg :: Nil) ++ msgs ++ sols)
|
info fc $ unlines ((msg :: Nil) ++ msgs ++ sols)
|
||||||
@@ -262,7 +259,7 @@ processDecl ns (Instance instfc ty decls) = do
|
|||||||
-- ok so we need a name, a hack for now.
|
-- ok so we need a name, a hack for now.
|
||||||
-- Maybe we need to ask the user (e.g. `instance someName : Monad Foo where`)
|
-- Maybe we need to ask the user (e.g. `instance someName : Monad Foo where`)
|
||||||
-- or use "Monad\{show $ length' defs}"
|
-- or use "Monad\{show $ length' defs}"
|
||||||
let instname = interpolate $ pprint Nil codomain
|
let instname = render 90 $ pprint Nil codomain
|
||||||
let sigDecl = TypeSig instfc (instname :: Nil) ty
|
let sigDecl = TypeSig instfc (instname :: Nil) ty
|
||||||
-- This needs to be declared before processing the defs, but the defs need to be
|
-- This needs to be declared before processing the defs, but the defs need to be
|
||||||
-- declared before this - side effect is that a duplicate def is noted at the first
|
-- declared before this - side effect is that a duplicate def is noted at the first
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
module Lib.Syntax
|
module Lib.Syntax
|
||||||
|
|
||||||
import Data.String
|
import Data.String
|
||||||
import Data.Maybe
|
|
||||||
import Lib.Parser.Impl
|
import Lib.Parser.Impl
|
||||||
import Lib.Prettier
|
import Lib.Prettier
|
||||||
import Lib.Types
|
import Lib.Types
|
||||||
|
|||||||
@@ -4,13 +4,10 @@ module Lib.Types
|
|||||||
import Lib.Common
|
import Lib.Common
|
||||||
import Lib.Prettier
|
import Lib.Prettier
|
||||||
|
|
||||||
import Data.Fin
|
|
||||||
import Data.IORef
|
import Data.IORef
|
||||||
import Data.List
|
|
||||||
import Data.SnocList
|
import Data.SnocList
|
||||||
import Data.SortedMap
|
import Data.SortedMap
|
||||||
import Data.String
|
import Data.String
|
||||||
import Data.Vect
|
|
||||||
|
|
||||||
data QName : U where
|
data QName : U where
|
||||||
QN : List String -> String -> QName
|
QN : List String -> String -> QName
|
||||||
@@ -22,9 +19,6 @@ instance Show QName where
|
|||||||
show (QN Nil n) = n
|
show (QN Nil n) = n
|
||||||
show (QN ns n) = joinBy "." ns ++ "." ++ n
|
show (QN ns n) = joinBy "." ns ++ "." ++ n
|
||||||
|
|
||||||
instance Interpolation QName where
|
|
||||||
interpolate = show
|
|
||||||
|
|
||||||
instance Ord QName where
|
instance Ord QName where
|
||||||
compare (QN ns nm) (QN ns' nm') = if ns == ns' then compare nm nm' else compare ns ns'
|
compare (QN ns nm) (QN ns' nm') = if ns == ns' then compare nm nm' else compare ns ns'
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
module Main
|
module Main
|
||||||
|
|
||||||
import Data.List
|
|
||||||
import Data.List1
|
import Data.List1
|
||||||
import Data.String
|
import Data.String
|
||||||
import Data.Vect
|
|
||||||
import Data.IORef
|
import Data.IORef
|
||||||
import Lib.Common
|
import Lib.Common
|
||||||
import Lib.Compile
|
import Lib.Compile
|
||||||
@@ -19,11 +17,6 @@ import Lib.Types
|
|||||||
import Lib.Syntax
|
import Lib.Syntax
|
||||||
import Lib.Syntax
|
import Lib.Syntax
|
||||||
import Node
|
import Node
|
||||||
-- import System
|
|
||||||
-- import System.Directory
|
|
||||||
-- import System.File
|
|
||||||
-- import System.Path
|
|
||||||
-- import Data.Buffer
|
|
||||||
|
|
||||||
jsonTopContext : M Json
|
jsonTopContext : M Json
|
||||||
jsonTopContext = do
|
jsonTopContext = do
|
||||||
@@ -155,7 +148,7 @@ showErrors fn src = do
|
|||||||
top <- get
|
top <- get
|
||||||
(Nil) <- liftIO {M} $ readIORef top.errors
|
(Nil) <- liftIO {M} $ readIORef top.errors
|
||||||
| errors => do
|
| errors => do
|
||||||
ignore $ for errors $ \err =>
|
for_ errors $ \err =>
|
||||||
putStrLn (showError src err)
|
putStrLn (showError src err)
|
||||||
-- if err.file == fn
|
-- if err.file == fn
|
||||||
-- then putStrLn (showError src err)
|
-- then putStrLn (showError src err)
|
||||||
|
|||||||
Reference in New Issue
Block a user