Arrow

圏論ばっかやってると飽きる。まあ、モナドが色々な場面でよいインターフェースだという点については、概ね合意が得られてると思うんだけど、Arrowはどうなんかな〜っていうか、そもそも、Arrowとか、まともに使ってるライブラリが殆どないので、よーわからん。モナドがあれば、いつでもArrowが作れるから、そういう意味では一杯あるとも言えるけど

とりあえず、
http://en.wikibooks.org/wiki/Haskell/Understanding_arrows
によると
(1)LL(1)パーサ
Arrowを採用してるというか、John Hughesが"Generalising Monads To Arrows"で、インスパイアされましたって言ってるだけなんだけど。なんか、モナドインターフェースを採用することによって生じる非効率性を解決するためにほげほげ〜的なことが書いてあるけど、とりあえず、Parsecで不満ないしな。ていうか、不満でるほど、パーサなんてしょっちゅう書かないし。あと、ちゃんとした実装が長い間なかったとか。今はPArrowsとかあるらしい
http://www.cs.helsinki.fi/u/ekarttun/PArrows/
PArrow.ToJavaScriptってのが何なのか気になる


(2)Fudgets
Hughesが上の論文で参考にしたって言ってるもう一つのライブラリ。GUIツールキットって書いてるけど、2002年くらいで放置なので、そのまんまではインストールできなかった


(3)Yampa(Arrowised Functional Reactive Programming)
このへんで何か調べてたけど、何か書いてこうと言いながら、全く放置。


(4)Haskell XML ToolBox
http://www.fh-wedel.de/~si/HXmlToolbox/
XML処理用のライブラリは、一応GHC6.6には標準でくっついてた気がするけど、そこを敢えてArrowで、みたいな。


現在のところ、(2)と(3)は放置状態にあるので、まあ何かするなら(1)か(4)だろうなぁ。でも、ArrowXmlって、ArrowApplyのサブクラスで、ArrowApplyからは、ArrowMonadというモナドが作れてしまうので、別にモナドでいいんちゃう?という気がしないでもない。ただ、"Kleisli Arrow"は、自然にArrowChoiceのインスタンスでもあるので、もし、ArrowXmlに入ってるArrowChoiceの構造が、ArrowXmlのArrowMonadのKleisli Arrowから決まるArrowChoice構造と違うなら、意味はあるのかなという気がする。しかし、それを確認するには、Arrowの関係式が多すぎて面倒くさい