ringtaroのHaskell日記

2007年03月15日(木)

ゆるーいHaskell[9] を見た 18:02

今回は型システムの話。どうやら型システムは憶えていた模様。

しかし、flipというものが出てくる。

Prelude> :m Data.Tree
Prelude Data.Tree> let t = Node 1 [Node 2 [Node 3 [], Node 4 []], Node 5 []]
Prelude Data.Tree> rootLabel $ flip (!!) 1 $ subForest $ flip (!!) 0 $ subForest t
4

ぬ、何だこれは?

調べると、引数の順番を入れ替えてくれるものらしい。

ほほう、これは便利。

でも、何故ここで登場?

Prelude Data.Tree> rootLabel $ (subForest $ subForest t !! 0) !! 1
4

で、良いのでは?と思ったけど、

Prelude Data.Tree> let getSubForestItem = \i n -> flip (!!) i $ subForest n
Prelude Data.Tree> rootLabel $ getSubForestItem 1 $ getSubForestItem 0 t
4

と、こんな風に考えたのかなと勝手に解釈&勝手に納得。

ゲスト



トラックバック - http://haskell.g.hatena.ne.jp/ringtaro/20070315