# language-elm
A haskell library for generating elm source code from an ast.
## Usage
Install language-elm from stack
```
stack install language-elm
```
## Documentation
[Documentation](https://hackage.haskell.org/package/language-elm)
<!--
Import the libraries
```haskell
import Elm.Decleration
import Elm.Expression
import Elm.Import
import Elm.Program
import Elm.Type
```
Declare a program type
```haskell
program : Program
program =
Program
"Tuple"
(Select
[ Item "first"
, Item "second"
, Item "mapFirst"
, Item "mapSecond"
])
[]
[ Dec
"first"
(TApp [TTuple2 (tvar "a1") (tvar "a2"), tvar "a1"])
[Tuple2 (var "x") (Under)]
(var "x")
, Dec
"second"
(TApp [TTuple2 (tvar "a1") (tvar "a2"), tvar "a2"])
[Tuple2 (Under) (var "y")]
(var "y")
, Dec
"mapFirst"
(TApp
[ TApp [tvar "a", tvar "b"]
, TTuple2 (tvar "a") (tvar "a2")
, TTuple2 (tvar "b") (tvar "a2")
])
[var "func", Tuple2 (var "x") (var "y")]
(Tuple2 (App "func" [var "x"]) (var "y"))
, Dec
"mapSecond"
(TApp
[ TApp [tvar "a", tvar "b"]
, TTuple2 (tvar "a1") (tvar "a")
, TTuple2 (tvar "a1") (tvar "b")
])
[var "func", Tuple2 (var "x") (var "y")]
(Tuple2 (var "x") (App "func" [var "y"]))
]
```
Then render the program
```haskell
output :: String
output = renderProgram program
```
Which results in the following output
```elm
module Tuple exposing (first, second, mapFirst, mapSecond)
first :: ((a1, a2)) -> a1
first (x, _) = x
second :: ((a1, a2)) -> a2
second (_, y) = y
mapFirst :: (a -> b) -> ((a, a2)) -> ((b, a2))
mapFirst func (x, y) = (func x, y)
mapSecond :: (a -> b) -> ((a1, a)) -> ((a1, b))
mapSecond func (x, y) = (x, func y)
```
-->