[make StatM monad strict in its statistics gathering field
John Meacham <john@repetae.net>**20061129020225] hunk ./Stats.hs 18
+    Stats.singleStat,
hunk ./Stats.hs 29
+    mtickStat,
hunk ./Stats.hs 181
+mtickStat :: MonadStats m =>  Stat -> m ()
+mtickStat (Stat stats)  = sequence_  [ mticks n a | (a,n) <- Map.toList stats]
+
hunk ./Stats.hs 206
-newtype StatM a = StatM (StatT Identity a)
-    deriving(Functor, MonadFix, Monad, MonadStats)
-
hunk ./Stats.hs 210
+
+data StatM a = StatM a !Stat
+
+instance Functor StatM where
+    fmap f (StatM a s) = StatM (f a) s
+
+instance Monad StatM where
+    StatM _ s1 >> StatM y s2 = StatM y (s1 `mappend` s2)
+    return x = StatM x mempty
+    StatM x s1 >>= y = case y x of StatM z s2 -> StatM z (s1 `mappend` s2)
+
+instance Stats.MonadStats StatM where
+   mticks' 0 k = StatM () mempty
+   mticks' n k = StatM () $ Stats.singleStat n k
+
+
+
hunk ./Stats.hs 228
-runStatM (StatM (StatT m)) = runIdentity $ runWriterT m
+runStatM (StatM a s) = (a,s)
hunk ./Stats.hs 253
+singleStat 0 _ = mempty
+singleStat n k = Stat $ Map.singleton (toAtom k) n