トラバースを一回にしても
http://karetta.jp/article/blog/oneline/008668
http://konoe.lab2.kuis.kyoto-u.ac.jp/~hanatani/tdiary/?date=20061206
計算量が減るというわけではないんだな。
逆に、末尾再帰でなくなるせいで、空間計算量が増えるということもないわけではなかったり。
-
-
- -
-
http://haskell.g.hatena.ne.jp/jmk/20061206/1165380658
ところで、モナドもこうなっていると俄然かっこいいですね(何が?)
-
-
- -
-
そうか、わかった。
tnorm t = let (r, m) = runWriter iteration in runReader r (getMin m) where iteration = unComp $ traverse (Comp . fmap trep . tmin) t trep a = asks (div a) tmin a = tell (Min a) >> return a
この「m」のところが重要だったのか。