Grzegorz Chrupała avatar Grzegorz Chrupała committed d0004fe

Stricter version of mappend in NLP.Scores

Comments (0)

Files changed (1)

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
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.