{ toString : a -> String
, fromString : String -> Maybe a
, encode : a -> Json.Decode.Value
, decoder : Json.Decode.Decoder a
, list : List ( String
, a )
}
An Enum
is a record containing common helper functions
create : List ( String, a ) -> Enum a
Create an Enum
from a list of String
and variants
type Fruit
= Apple
| Banana
| Mango
fruit : Enum Fruit
fruit =
Enum.create
[ ( "Apple", Apple )
, ( "Banana", Banana )
, ( "Mango", Mango )
]
fromIterator : (a -> ( String, a )) -> a -> Enum a
Create an Enum
from an iterator function and a starting variant.
It may look unusual, but the benefit is that the case
statement helps ensure that you don't forget a variant.
type Fruit
= Apple
| Banana
| Mango
fruit : Enum Fruit
fruit =
Enum.fromIterator
(\a ->
case a of
Apple ->
( "Banana", Banana )
Banana ->
( "Mango", Mango )
Mango ->
( "Apple", Apple )
)
Apple
{ toInt : a -> Basics.Int
, fromInt : Basics.Int -> Maybe a
, encode : a -> Json.Decode.Value
, decoder : Json.Decode.Decoder a
, list : List ( Basics.Int
, a )
}
Enums based on Int
instead of String
createInt : List ( Basics.Int, a ) -> EnumInt a
Create an EnumInt
from a list of Int
and variants
type Fruit
= Apple
| Banana
| Mango
fruit : EnumInt Fruit
fruit =
Enum.createInt
[ ( 1, Apple )
, ( 2, Banana )
, ( 3, Mango )
]
fromIntIterator : (a -> ( Basics.Int, a )) -> a -> EnumInt a
Create an EnumInt
from an iterator function and a starting variant
type Fruit
= Apple
| Banana
| Mango
enum : EnumInt Fruit
enum =
Enum.fromIntIterator
(\a ->
case a of
Mango ->
( 1, Apple )
Apple ->
( 2, Banana )
Banana ->
( 3, Mango )
)
Apple