The main compiler module
- compile :: Options -> [Module] -> Either String (String, String, Environment)
- compile' :: Environment -> Options -> [Module] -> Either String (String, String, Environment)
- class MonadMake m where
- make :: (Functor m, Monad m, MonadMake m) => FilePath -> Options -> [(FilePath, Module)] -> m Environment
Compile a collection of modules
The compilation pipeline proceeds as follows:
- Sort the modules based on module dependencies, checking for cyclic dependencies.
- Perform a set of desugaring passes.
- Type check, and elaborate values to include type annotations and type class dictionaries.
- Regroup values to take into account new value dependencies introduced by elaboration.
- Eliminate dead code.
A type class which collects the IO actions we need to be able to run in make mode
Get a file timestamp
Read a file as a string
Write a text file
Report an error
Respond to a progress update
Compiles in make mode, compiling each module separately to a js files and an externs file
If timestamps have not changed, the externs file can be used to provide the module's types without having to typecheck the module again.