language-elm: Generate elm code

[ bsd3, library, web ] [ Propose Tags ]

Generate elm code from an ast

[Skip to Readme]
Versions [faq],,,,,,,,,,,,,,,,,,,
Dependencies base (>=4.9.1 && <4.10), MissingH (>=1.4.0 && <1.5), mtl (>=2.2.1 && <2.3), pretty (>=1.1.3 && <1.2), protolude (==0.2.*) [details]
License BSD-3-Clause
Copyright 2017 Elias Lawson-Fox
Author Elias Lawson-Fox
Category Web
Home page
Source repo head: git clone
Uploaded by eliaslfox at Wed Sep 13 08:44:24 UTC 2017
Distributions NixOS:
Downloads 3624 total (160 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2017-09-13 [all 1 reports]




Maintainer's Corner

For package maintainers and hackage trustees

Readme for language-elm-

[back to package description]


A haskell library for generating elm source code from an ast.


Install language-elm from stack

stack install 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

program : Program
program =
            [ Item "first"
            , Item "second"
            , Item "mapFirst"
            , Item "mapSecond"
        [ Dec
            (TApp [TTuple2 (tvar "a1") (tvar "a2"), tvar "a1"])
            [Tuple2 (var "x") (Under)]
            (var "x")
        , Dec
            (TApp [TTuple2 (tvar "a1") (tvar "a2"), tvar "a2"])
            [Tuple2 (Under) (var "y")]
            (var "y")
        , Dec
                [ 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
                [ 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

output :: String
output = renderProgram program

Which results in the following output

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)