Workshop/StartHaskell2/exercise12

『モノイド』 練習問題

newtypeを使ってみよう

第3章に、体重と身長を受け取って肥満度指数(BMI)を計算する関数があった。

上のbmi関数は、ありえない体重や身長が引数として渡されても動いてしまう。そこで、ただのDoubleではなく、それが体重を表すDoubleであることを明示するためにnewtypeを使うことを考える。

上の型を使って、bmi関数を書き直した新しいbmi2関数を実装しよう。


モノイド則を確認しよう

モノイドには、固有の二項演算が定義されていて、その演算はモノイド則と呼ばれる2つの性質を満たす必要がありました。(p.267)

-その二項演算に単位元があること =左右どちらから演算しても結果を変えない元がある -その二項演算が結合的であること =演算結果は括弧のつけ方によらない

次のものは、指定された演算に関してモノイドになっています。実際にモノイド則ガ成り立っているか確認してみよう。

  • 整数は、足し算(+)に関してモノイド
  • 非負の自然数は、掛け算(*)に関してモノイド
  • 有限な文字列(String)は、文字列連結(++)に関してモノイド

他にも Ordering型(p.272)や、Maybe型(p.275)はモノイドになるので、モノイド則を確認してみよう。