1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

いなたつAdvent Calendar 2019

Day 11

Haskellの直和型とBool型のおはなし

Last updated at Posted at 2019-12-11

はじめに

いなたつアドカレの十一日目の記事です。

とてもネタ切れと時間のなさを痛感しています。

今回は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'

こうやって、直和型として定義をすることで、関数内での扱いの見通しもよくなります。

さあ、直和型をすころう

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?