purescript- PureScript Programming Language Compiler

Safe HaskellNone



The main compiler module



compile :: Options Compile -> [Module] -> [String] -> Either String (String, String, Environment) Source

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.
  • Generate Javascript, and perform optimization passes.
  • Pretty-print the generated Javascript

data RebuildPolicy Source

Determines when to rebuild a module



Never rebuild this module


Always rebuild this module

class MonadMake m where Source

A type class which collects the IO actions we need to be able to run in "make" mode


getTimestamp :: FilePath -> m (Maybe UTCTime) Source

Get a file timestamp

readTextFile :: FilePath -> m String Source

Read a file as a string

writeTextFile :: FilePath -> String -> m () Source

Write a text file

liftError :: Either String a -> m a Source

Report an error

progress :: String -> m () Source

Respond to a progress update

make :: (Functor m, Applicative m, Monad m, MonadMake m) => FilePath -> Options Make -> [(Either RebuildPolicy FilePath, Module)] -> [String] -> m Environment Source

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.