可読性のためにいろいろ使われているが、全てcase
式の構文糖衣である。
case
すべての条件はcase
で表せる。ただし可読性を優先してそれぞれ使い分けることになる。
case
では、パターンマッチまたは式の評価を行える。
パターンマッチとは、引数にとるなどした値が、どのコンストラクタで作られたかによって場合分けを行う方法を指す。
case 式 of
パターン1 -> 式1
パターン2 -> 式2
| ガード条件1 -> 式3
| ガード条件2 -> 式4
| ガード条件3 -> 式5
if
条件の真偽によって宣言を分けたい、という意味合いが強ければif
が適している。
if 条件式 then 式1 else 式2
ガード
幾つかの条件を優先度の高い順に指定して、真になったタイミングで宣言を分岐させたい、という意味合いならばガード。並列的に複数の条件を記述したければこちらだろうか。
関数 引数
| ガード条件1 = 式1
| ガード条件2 = 式2
| otherwise = 式3
if をcase に変換する
条件式の結果がTrue
コンストラクタにマッチするか、False
コンストラクタにマッチするかの場合分けを行っている。
case 条件式 of
True -> 式1
False -> 式2
ガードを case に変換する
パターンマッチは行っていないので無視していて、ガードのみ使っている。
case () of
_
| ガード条件1 -> 式1
| ガード条件2 -> 式2
| ガード条件3 -> 式3