カスタム型の宣言の解説
書いている時点でのバージョンは0.19だが、多分以前も以降も大丈夫だと思う
type Msg = Increment | Decrement
左辺には type 型名
右辺には|で区切りつつ、大文字始まりで列挙する
値コンストラクタ、値構築子とも呼ばれるかもしれない 右辺は一つでも複数でもいい
型名もコンストラクタ名も大文字始まりである必要がある
コンストラクタを呼ぶことで、左辺で指定した型を持つ値を得ることができる
replで確認
code:elm
type Msg = Increment | Decrement
Increment
Increment : Msg
一行目は型の宣言文、二行目は式といえる
すなわち、type MyType = A | B | ... による型宣言は、同時にコンストラクタの宣言もしていると言える
型名とコンストラクタ名を同名にすることができる
引数を持つコンストラクタの宣言
右辺のコンストラクタには、後ろにスペース区切りで型を追記することで、引数を持つコンストラクタができる
code:elm
type User
= Regular String Int Location
| Visitor String
| Anonymous
Anonymousは引数を持っていない
VisitorはStringを引数に持つ関数
code:elm
Visitor
<function> : String -> User
なので、Visitor "taro"はUser型になる
同様にRegularは、String, Int, Locationを引数に持つので
型はString -> Int -> Location -> User
つまり、コンストラクタには、
左辺の型の値、または
左辺の型の値を返す関数
を宣言できる