
On Sun, May 15, 2011 at 11:39 AM, Manfred Lotz
I also tried something similar, and indeed you are right. mapM_ in conjunction with toList is better in terms of memory and runtime (mainly because GC is less busy) than using functions from Traversable.
If you want just the side effects you shouldn't be using Traversable, but Foldable. In particular [1], mapM_ :: (Foldable t, Monad m) => (a -> m b) -> t a -> m () Doing the same test as Daniel Fischer's, but with an additional definition import qualified Data.Foldable as F perFoldable :: (Ord k, Show v) => Map k v -> IO () perFoldable = F.mapM_ print which is also the shortest definition, I get the following results: viaList: 208 MiB total memory, 2.24s MUT time, 1.11s GC time, 3.35s total time viaElems: 208 MiB total memory, 1.40s MUT time, 1.13s GC time, 2.53s total time perTraverse: 322 MiB total memory, 1.77s MUT time, 2.84s GC time, 4.61s total time perFoldable: 215 MiB total memory, 1.53s MUT time, 1.73s GC time, 3.26s total time Cheers, [1] http://hackage.haskell.org/packages/archive/base/4.3.1.0/doc/html/Data-Folda... -- Felipe.