Script to generate domain-specific Elm types wrapping primitives (see https://robots.thoughtbot.com/lessons-learned-avoiding-primitives-in-elm for why this is a good idea)
Use looks like:
% ./create_newtype Email String > email.elm
module Email exposing (Email, fromString, toString, map, map2)
type Email = Email String
fromString : String -> Email
fromString x =
Email x
toString : Email -> String
toString (Email x) =
x
map : (String -> String) -> Email -> Email
map f (Email x) =
Email (f x)
map2 : (String -> String -> String) -> Email -> Email -> Email
map2 f (Email x) (Email y) =
Email (f x y)