elm-build-lib-0.0.1: Elm compiler wrapper

Safe HaskellSafe-Inferred



A Haskell library wrapper around the Elm executable, to build files from within Haskell.

For more information on Elm, see http://elm-lang.org.

There are two main steps to using this library: converting Elm source to a Module structure, then compiling various modules.

To compile a string to a module, simply do

let auxModule = moduleFromString (pack "Aux") (pack $ "module Aux where\n" ++ "x = 3")


let mainModule = moduleFromString (pack "Main") (pack $ "import Aux\n" ++ "main = plainText (show Aux.x)")

Note that the first argument must match the name given in the module X where declaration in your elm file. Both arguments must be Text, not String. You can use moduleFromFile similarly.

Once you have some modules, you can compile them into JavaScript or HTML:

Right js <- buildModulesWithOptions defaultOptions mainModule [auxModule]

The first argument is always the module containing the main definition for Elm. The list is the list of all files which are dependencies of the main module. Files are written to a temp directory, then compiled using the --make option.

A current limitation is that only single-directory structures are supported.



type Module = InternalModule Source

Opaque type representing an Elm module loaded from a string or file

type Javascript = Text Source

Type representing Javascript output (as a string)

data BuildOptions Source

Abstraction for the options given to the elm executable Note that not all Elm options may be avaliable

type ModuleName = Text Source

Synonym for module names (i.e. Data.Text, Main, etc.)

type ModuleSource = Text Source

Type for module source code

defaultOptions :: BuildOptions Source

Default options are: elm as binary, no runtime given, and generate JS only

moduleFromString :: ModuleName -> ModuleSource -> Module Source

Generate a module with the given Module name (e.g. Foo) and the given source code

moduleFromFile :: ModuleName -> FilePath -> IO Module Source

Read a module from a file, with the given module name and file path

buildModules :: Module -> [Module] -> IO (Either String Javascript) Source

Build a group of elm modules with the elm from the system `$PATH` generating JavaScript using the default runtime location

buildModulesWithOptions :: BuildOptions -> Module -> [Module] -> IO (Either String Javascript) Source

Given an elm "main" module, and a list of other modules, compile them using the `--make` option and the given options