はじめに
いなたつアドカレの十一日目の記事です。
とてもネタ切れと時間のなさを痛感しています。
今回はHaskellの直和型とBool型に関するお話です。
直和型とは
集合論的に考えて、これかこれかこれみたいな「or」の関係の型となります。
フィールドを与えて直積の列挙みたいな感じの表現もでき多彩なことができます。
HaskellにおけるBool型
data Bool = True | False
Haskelはdataキーワードを用いることで、新しい型を定義することができます。
Boolという型はTrueもしくはFalseという値(コンストラクタ)を持つということがわかります。
性別を型で管理したい
ある日、性別を型で管理したくなりました。
私は男性なので、プログラム上では、Bool型で男性ならTrue、女性ならFalseとなるでしょうか?
違います。そう、Haskellならね(キリッ)
性別を型で管理する
計画当初は性別は男性もしくは女性だったかもしれませんが、時代の流れにのっとりその他の項目を追加したとしましょう。
Bool型では処理仕切れなくなってしまいます。
data Gender = Male | Female | Other
これで、三つの直和型になり、拡張もしやすくなりますね。
そして、このように型を定義することで、関数内での扱いも見通しがよくなります。
ここでは、性別はBool型にあわせるために男性もしくは女性でTrue,Falseとします。
genderInitial :: Bool -> Char
genderInitial True = 'M'
genderInitial False = 'F'
genderInitial' :: Gender -> Char
genderInitial' Male = 'M'
genderInitial' Female = 'F'
こうやって、直和型として定義をすることで、関数内での扱いの見通しもよくなります。
さあ、直和型をすころう