Add basic import system. Basically C-style include
Separate desugaring stage
I think it will be particularly useful later when adding a check for
type vars being bound after inference. Also, will be nice if more
sugar is added later.
Remove interpreter. Won't be compatible with foreign functions
May re-add it later, but not for general usage, but just evaluation of
pure expressions when doing codegen for global, non-function variables
and in other constexpr contexts.
Impl sizeof with getTypeAllocSize. sizeof :: Type -> Gen Word64
This is much better than sizeof :: Type -> Constant, and will allow us
to much more easily implement unions in LLVM.
`printErr : ... -> IO ()` to `prettyErr : ... -> Source -> String`
Instead of reading the source file (for the second time) via IO, pass
along the source we got in Main
Remove noisy stdout output & Improve formatting of err msgs
Mark offending section of offending line in type errors
by applying the parser at the sourcepos of the item, and counting how
long the consumed input was to get the span of the item in the source.
Print offending line in type error msg
data TypeErr = OtherErr String | PosErr SourcePos String
Change Parsec to Megaparsec
Seems to be better all-around
fix tests: Readd Pretty impls for Ast & inst Arbitrary for ConstructorDefs
Unabstract Annot.hs*(Check.hs+Mono.hs) into AnnotAst.hs+MonoAst.hs
Explicit export of main in Main & rm unused import in Mono
Literate programming: Compile .org by untangling carth src blocks
Fix self-recursion due to type in interpret'
Keep Pretty instances together instancees
Compile binary w cc in Compile.hs & Improve command line interface
Write some debug output to files instead of printing
Separate codegen and compilation in app