2009年01月16日
_ 型推論
静的型関数型言語がたいていの場合型推論を 持っているのは、理論的な興味のあるのでしょうが、 基本的には高階関数を活用するためという理由が 大きい気がします。
mapやfoldやその他を利用するのに一々 無名関数の引数や返り値の型を書いてはいられません。
C#で型推論がLINQとともに導入されたのも 同じ理由でしょう。
追記: 逆に言えば高階関数や無名関数が無い場合には 型推論はそれほど必要ではありません。あとまあ 高階関数を導入するなら多相型が必須という話もありますが これは別の話。
2009年01月26日
_ Haskellのモナド
私が思うにHaskellのモナドには以下の3つの重要な側面があります。
- いわゆるモナド則
- 型クラスによって異なる計算法則を持つ世界を分離すること
- 構文糖衣(do式)
で、モナドの種類によってこれらの側面のうち どれが重要かは異なります。 例えばIOモナドであれば、IOという型クラスによって 副作用があり順序が重要な世界と通常のHaskellの遅延評価を 標準で行うような世界を分離するという側面が重要になります。 Parsecもモナドを使いますが、この場合はdo式という構文糖衣を 使いたいというのが重要であるように思われます。
これら3つの要素は深い関係があるのですが、 全ての側面が常に同等に重要というわけではありません。 ある機能がモナドで提供されている場合、それが何故 モナドなのかというのを考えるためにはこういうことを考えて みるのがいいかもしれません。