monoidmap 0.0.1.7 → 0.0.1.8
raw patch · 5 files changed
+75/−69 lines, 5 files
Files
- CHANGELOG.md +4/−0
- monoidmap.cabal +1/−1
- src/internal/Data/MonoidMap/Internal.hs +12/−24
- src/public/Data/MonoidMap.hs +1/−0
- src/test/Data/MonoidMap/FoldSpec.hs +57/−44
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