トップ «前の日記(2006-06-14) 最新 次の日記(2006-06-17)» 月表示 編集

日々の流転


2006-06-15 [長年日記]

λ. どんな場合にポイントフリースタイルを使うべきか

<URL:http://d.hatena.ne.jp/lethevert/20060613/p3> より。

私の場合、ポイントフリースタイルを使うのは圏論の概念に基づいて考えるとき。だから、射の結合, 関手, 随伴, etc と解釈できるものについてはそれぞれ射になるまで必要な引数を明示的に与える。

  • f . g
  • map h
  • either f g
  • foldr c n
  • unfoldr phi
  • arr f >>> g

結局、関数型の値はポイントフリーにせずに明示的に受け渡すのがほとんど。もちろん、cartesian closed category で考えれば、関数型の値をポイントフリースタイルで受け渡すことに何の問題もないけど、それによってコードが分かりやすくなることはあまりないと思う。

実際、rmap = map . flip ($) のような書き方はかなり気持ち悪いと感じる。圏論の何らかの概念を利用できているわけでもないのだから、愚直に rmap a fs = [f a | f <- fs] と書いた方が良い。どうせ、長さは数文字しか違わないし、これなら誰にでも一目で意味がわかる。

追記 (2006-06-21)

ところで、A New Notation for Arrowsのページには以下のように書かれていたりする(強調は私によるもの)。

Recently, several workers have proposed a generalization of monads, called variously “arrows” or Freyd-categories. The extra generality promises to increase the power, expressiveness and efficiency of the embedded approach, but does not mesh as well with the native abstraction and application. Definitions are typically given in a point-free style, which is useful for proving general properties, but can be awkward for programming specific instances.
Tags: haskell