2009年01月26日
_ Haskellのモナド
私が思うにHaskellのモナドには以下の3つの重要な側面があります。
- いわゆるモナド則
- 型クラスによって異なる計算法則を持つ世界を分離すること
- 構文糖衣(do式)
で、モナドの種類によってこれらの側面のうち どれが重要かは異なります。 例えばIOモナドであれば、IOという型クラスによって 副作用があり順序が重要な世界と通常のHaskellの遅延評価を 標準で行うような世界を分離するという側面が重要になります。 Parsecもモナドを使いますが、この場合はdo式という構文糖衣を 使いたいというのが重要であるように思われます。
これら3つの要素は深い関係があるのですが、 全ての側面が常に同等に重要というわけではありません。 ある機能がモナドで提供されている場合、それが何故 モナドなのかというのを考えるためにはこういうことを考えて みるのがいいかもしれません。