トップ 最新 追記

ohai日誌

2003|12|
2004|01|02|03|04|05|06|07|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|06|08|10|11|
2008|01|02|03|04|05|07|09|
2009|01|02|
2013|06|12|
2014|01|02|03|04|06|09|10|12|
2015|04|
2016|09|
2018|02|

2009年01月16日

_ 型推論

静的型関数型言語がたいていの場合型推論を 持っているのは、理論的な興味のあるのでしょうが、 基本的には高階関数を活用するためという理由が 大きい気がします。

mapやfoldやその他を利用するのに一々 無名関数の引数や返り値の型を書いてはいられません。

C#で型推論がLINQとともに導入されたのも 同じ理由でしょう。

追記: 逆に言えば高階関数や無名関数が無い場合には 型推論はそれほど必要ではありません。あとまあ 高階関数を導入するなら多相型が必須という話もありますが これは別の話。


2009年01月26日

_ Haskellのモナド

私が思うにHaskellのモナドには以下の3つの重要な側面があります。

  • いわゆるモナド則
  • 型クラスによって異なる計算法則を持つ世界を分離すること
  • 構文糖衣(do式)

で、モナドの種類によってこれらの側面のうち どれが重要かは異なります。 例えばIOモナドであれば、IOという型クラスによって 副作用があり順序が重要な世界と通常のHaskellの遅延評価を 標準で行うような世界を分離するという側面が重要になります。 Parsecもモナドを使いますが、この場合はdo式という構文糖衣を 使いたいというのが重要であるように思われます。

これら3つの要素は深い関係があるのですが、 全ての側面が常に同等に重要というわけではありません。 ある機能がモナドで提供されている場合、それが何故 モナドなのかというのを考えるためにはこういうことを考えて みるのがいいかもしれません。


トップ 最新 追記