Workshop/StartHaskell2/exercise12
『モノイド』 練習問題
newtypeを使ってみよう
第3章に、体重と身長を受け取って肥満度指数(BMI)を計算する関数があった。
上のbmi関数は、ありえない体重や身長が引数として渡されても動いてしまう。そこで、ただのDoubleではなく、それが体重を表すDoubleであることを明示するためにnewtypeを使うことを考える。
上の型を使って、bmi関数を書き直した新しいbmi2関数を実装しよう。
モノイド則を確認しよう
モノイドには、固有の二項演算が定義されていて、その演算はモノイド則と呼ばれる2つの性質を満たす必要がありました。(p.267)
-その二項演算に単位元があること =左右どちらから演算しても結果を変えない元がある -その二項演算が結合的であること =演算結果は括弧のつけ方によらない
次のものは、指定された演算に関してモノイドになっています。実際にモノイド則ガ成り立っているか確認してみよう。
- 整数は、足し算(+)に関してモノイド
- 非負の自然数は、掛け算(*)に関してモノイド
- 有限な文字列(String)は、文字列連結(++)に関してモノイド
他にも Ordering型(p.272)や、Maybe型(p.275)はモノイドになるので、モノイド則を確認してみよう。