Commits

Grzegorz Chrupała  committed d0004fe

Stricter version of mappend in NLP.Scores

  • Participants
  • Parent commits 7a0fc80

Comments (0)

Files changed (1)

File nlp-scores/NLP/Scores.hs

 instance (Ord a, Ord b) => Monoid (Counts a b) where
     mempty = empty
     c `mappend` k = 
-        Counts { joint = Map.unionWith (+) (joint c) (joint k)
-               , marginalFst = Map.unionWith (+) (marginalFst c) (marginalFst k)
-               , marginalSnd = Map.unionWith (+) (marginalSnd c) (marginalSnd k)
+        Counts { joint = unionPlus (joint c) (joint k)
+               , marginalFst = unionPlus (marginalFst c) (marginalFst k)
+               , marginalSnd = unionPlus (marginalSnd c) (marginalSnd k)
                }
 
+unionPlus :: (Num a, Ord k) => Map.Map k a -> Map.Map k a -> Map.Map k a
+unionPlus m = 
+    Map.foldlWithKey' (\z k v -> Map.insertWith' (+) k v z) m
+{-# SPECIALIZE unionPlus :: (Ord k) => 
+  Map.Map k Count -> Map.Map k Count -> Map.Map k Count #-}
+
 -- | The empty count table
 empty :: (Ord a, Ord b) => Counts a b
 empty = Counts Map.empty Map.empty Map.empty