http://www.nicovideo.jp/watch/sm5103132 で、Haskell(というかGHC?)のControl.Arrowに関心を持ったので、すこしいじってみた。 loop その1 まず、理解が難しいloopから。なぜなら、どうもArrowを使うときにはトップダウンで考えないとわけが分からなくなるようなので。そしてあとで出す例もそうだけど、繰り返しをする仕事は一番上がloopになるので、loopに何を入れるべきなのかから考えはじめることになる。 とりあえず、(->)型(関数そのものの型)のloopの定義は次のとおり: class Arrow a => ArrowLoop a where loop :: a (b,d) (c,d) -> a b c instance ArrowLoop (->) where loop f b = let (c,d) = f (b,d)