packages feed

monoidmap 0.0.1.7 → 0.0.1.8

raw patch · 5 files changed

+75/−69 lines, 5 files

Files

CHANGELOG.md view
@@ -1,3 +1,7 @@+# 0.0.1.8++- Added strict variant of the `foldMapWithKey` function.+ # 0.0.1.7  - Added a selection of folding operations for `MonoidMap`.
monoidmap.cabal view
@@ -1,6 +1,6 @@ cabal-version:  3.0 name:           monoidmap-version:        0.0.1.7+version:        0.0.1.8 bug-reports:    https://github.com/jonathanknowles/monoidmap/issues license:        Apache-2.0 license-file:   LICENSE
src/internal/Data/MonoidMap/Internal.hs view
@@ -77,6 +77,7 @@     , foldr'     , foldlWithKey'     , foldrWithKey'+    , foldMapWithKey'      -- * Monoidal operations @@ -1083,12 +1084,6 @@ -- Each application of the operator is evaluated before using the result in the -- next application. This function is strict in the starting value. ----- Satisfies the following property:------ @--- 'foldl'' f r m '==' 'Map'.'Map.foldl'' f r ('toMap' m)--- @--- -- @since 0.0.1.7 -- foldl' :: (r -> v -> r) -> r -> MonoidMap k v -> r@@ -1105,12 +1100,6 @@ -- Each application of the operator is evaluated before using the result in the -- next application. This function is strict in the starting value. ----- Satisfies the following property:------ @--- 'foldr'' f r m '==' 'Map'.'Map.foldr'' f r ('toMap' m)--- @--- -- @since 0.0.1.7 -- foldr' :: (v -> r -> r) -> r -> MonoidMap k v -> r@@ -1127,12 +1116,6 @@ -- Each application of the operator is evaluated before using the result in the -- next application. This function is strict in the starting value. ----- Satisfies the following property:------ @--- 'foldlWithKey'' f r m '==' 'Map'.'Map.foldlWithKey'' f r ('toMap' m)--- @--- -- @since 0.0.1.7 -- foldlWithKey' :: (r -> k -> v -> r) -> r -> MonoidMap k v -> r@@ -1149,12 +1132,6 @@ -- Each application of the operator is evaluated before using the result in the -- next application. This function is strict in the starting value. ----- Satisfies the following property:------ @--- 'foldrWithKey'' f r m '==' 'Map'.'Map.foldrWithKey'' f r ('toMap' m)--- @--- -- @since 0.0.1.7 -- foldrWithKey' :: (k -> v -> r -> r) -> r -> MonoidMap k v -> r@@ -1165,6 +1142,17 @@     )     Map.foldrWithKey' {-# INLINE foldrWithKey' #-}++-- | \(O(n)\). A strict version of 'foldMapWithKey'.+--+-- Each application of `mappend` is evaluated before using the result in the+-- next application.+--+-- @since 0.0.1.8+--+foldMapWithKey' :: Monoid r => (k -> v -> r) -> MonoidMap k v -> r+foldMapWithKey' f = foldlWithKey' (\r k v -> r <> f k v) mempty+{-# INLINE foldMapWithKey' #-}  -------------------------------------------------------------------------------- -- Comparison
src/public/Data/MonoidMap.hs view
@@ -76,6 +76,7 @@     , foldr'     , foldlWithKey'     , foldrWithKey'+    , foldMapWithKey'      -- * Monoidal operations 
src/test/Data/MonoidMap/FoldSpec.hs view
@@ -36,92 +36,95 @@      describe "Lazy" $ do -        it "prop_toMap_foldl" $-            prop_toMap_foldl+        it "prop_equivalence_foldl" $+            prop_equivalence_foldl                 @k @v & property-        it "prop_toMap_foldr" $-            prop_toMap_foldr+        it "prop_equivalence_foldr" $+            prop_equivalence_foldr                 @k @v & property-        it "prop_toMap_foldlWithKey" $-            prop_toMap_foldlWithKey+        it "prop_equivalence_foldlWithKey" $+            prop_equivalence_foldlWithKey                 @k @v & property-        it "prop_toMap_foldrWithKey" $-            prop_toMap_foldrWithKey+        it "prop_equivalence_foldrWithKey" $+            prop_equivalence_foldrWithKey                 @k @v & property-        it "prop_toMap_foldMapWithKey" $-            prop_toMap_foldMapWithKey+        it "prop_equivalence_foldMapWithKey" $+            prop_equivalence_foldMapWithKey                 @k @v & property      describe "Strict" $ do -        it "prop_toMap_foldl'" $-            prop_toMap_foldl'+        it "prop_equivalence_foldl'" $+            prop_equivalence_foldl'                 @k @v & property-        it "prop_toMap_foldr'" $-            prop_toMap_foldr'+        it "prop_equivalence_foldr'" $+            prop_equivalence_foldr'                 @k @v & property-        it "prop_toMap_foldlWithKey'" $-            prop_toMap_foldlWithKey'+        it "prop_equivalence_foldlWithKey'" $+            prop_equivalence_foldlWithKey'                 @k @v & property-        it "prop_toMap_foldrWithKey'" $-            prop_toMap_foldrWithKey'+        it "prop_equivalence_foldrWithKey'" $+            prop_equivalence_foldrWithKey'                 @k @v & property+        it "prop_equivalence_foldMapWithKey'" $+            prop_equivalence_foldMapWithKey'+                @k @v & property  -------------------------------------------------------------------------------- -- Lazy folding -------------------------------------------------------------------------------- -prop_toMap_foldl+prop_equivalence_foldl     :: Test k v     => r ~ v     => Fun (r, v) r     -> r     -> MonoidMap k v     -> Property-prop_toMap_foldl (applyFun2 -> f) r m =+prop_equivalence_foldl (applyFun2 -> f) r m =     MonoidMap.foldl f r m       === Map.foldl f r (MonoidMap.toMap m) -prop_toMap_foldr+prop_equivalence_foldr     :: Test k v     => r ~ v     => Fun (v, r) r     -> r     -> MonoidMap k v     -> Property-prop_toMap_foldr (applyFun2 -> f) r m =+prop_equivalence_foldr (applyFun2 -> f) r m =     MonoidMap.foldr f r m       === Map.foldr f r (MonoidMap.toMap m) -prop_toMap_foldlWithKey+prop_equivalence_foldlWithKey     :: Test k v     => r ~ v     => Fun (r, k, v) r     -> r     -> MonoidMap k v     -> Property-prop_toMap_foldlWithKey (applyFun3 -> f) r m =+prop_equivalence_foldlWithKey (applyFun3 -> f) r m =     MonoidMap.foldlWithKey f r m       === Map.foldlWithKey f r (MonoidMap.toMap m) -prop_toMap_foldrWithKey+prop_equivalence_foldrWithKey     :: Test k v     => r ~ v     => Fun (k, v, r) r     -> r     -> MonoidMap k v     -> Property-prop_toMap_foldrWithKey (applyFun3 -> f) r m =+prop_equivalence_foldrWithKey (applyFun3 -> f) r m =     MonoidMap.foldrWithKey f r m       === Map.foldrWithKey f r (MonoidMap.toMap m) -prop_toMap_foldMapWithKey+prop_equivalence_foldMapWithKey     :: Test k v     => r ~ v     => Fun (k, v) r     -> MonoidMap k v     -> Property-prop_toMap_foldMapWithKey (applyFun2 -> f) m =+prop_equivalence_foldMapWithKey (applyFun2 -> f) m =     MonoidMap.foldMapWithKey f m       === Map.foldMapWithKey f (MonoidMap.toMap m) @@ -129,46 +132,56 @@ -- Strict folding -------------------------------------------------------------------------------- -prop_toMap_foldl'+prop_equivalence_foldl'     :: Test k v     => r ~ v     => Fun (r, v) r     -> r     -> MonoidMap k v     -> Property-prop_toMap_foldl' (applyFun2 -> f) r m =-    MonoidMap.foldl' f r m-      === Map.foldl' f r (MonoidMap.toMap m)+prop_equivalence_foldl' (applyFun2 -> f) r m =+    MonoidMap.foldl' f r m ===+    MonoidMap.foldl  f r m -prop_toMap_foldr'+prop_equivalence_foldr'     :: Test k v     => r ~ v     => Fun (v, r) r     -> r     -> MonoidMap k v     -> Property-prop_toMap_foldr' (applyFun2 -> f) r m =-    MonoidMap.foldr' f r m-      === Map.foldr' f r (MonoidMap.toMap m)+prop_equivalence_foldr' (applyFun2 -> f) r m =+    MonoidMap.foldr' f r m ===+    MonoidMap.foldr  f r m -prop_toMap_foldlWithKey'+prop_equivalence_foldlWithKey'     :: Test k v     => r ~ v     => Fun (r, k, v) r     -> r     -> MonoidMap k v     -> Property-prop_toMap_foldlWithKey' (applyFun3 -> f) r m =-    MonoidMap.foldlWithKey' f r m-      === Map.foldlWithKey' f r (MonoidMap.toMap m)+prop_equivalence_foldlWithKey' (applyFun3 -> f) r m =+    MonoidMap.foldlWithKey' f r m ===+    MonoidMap.foldlWithKey  f r m -prop_toMap_foldrWithKey'+prop_equivalence_foldrWithKey'     :: Test k v     => r ~ v     => Fun (k, v, r) r     -> r     -> MonoidMap k v     -> Property-prop_toMap_foldrWithKey' (applyFun3 -> f) r m =-    MonoidMap.foldrWithKey' f r m-      === Map.foldrWithKey' f r (MonoidMap.toMap m)+prop_equivalence_foldrWithKey' (applyFun3 -> f) r m =+    MonoidMap.foldrWithKey' f r m ===+    MonoidMap.foldrWithKey  f r m++prop_equivalence_foldMapWithKey'+    :: Test k v+    => r ~ v+    => Fun (k, v) r+    -> MonoidMap k v+    -> Property+prop_equivalence_foldMapWithKey' (applyFun2 -> f) m =+    MonoidMap.foldMapWithKey' f m ===+    MonoidMap.foldMapWithKey  f m