トラバースを一回にしても

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」のところが重要だったのか。