packages feed

monoidmap 0.0.2.1 → 0.0.3.0

raw patch · 8 files changed

+128/−1 lines, 8 files

Files

CHANGELOG.md view
@@ -1,3 +1,7 @@+# 0.0.3.0++- Added the `mapWithKey` function to `MonoidMap`.+ # 0.0.2.1  - Added support for GHC 9.12.
monoidmap.cabal view
@@ -1,6 +1,6 @@ cabal-version:  3.0 name:           monoidmap-version:        0.0.2.1+version:        0.0.3.0 bug-reports:    https://github.com/jonathanknowles/monoidmap/issues license:        Apache-2.0 license-file:   LICENSE
src/examples/Examples/RecoveredMap.hs view
@@ -20,6 +20,7 @@     , lookup     , member     , map+    , mapWithKey     , mapAccumL     , mapAccumLWithKey     , mapAccumR@@ -91,6 +92,9 @@  map :: (v1 -> v2) -> Map k v1 -> Map k v2 map f = Map . MonoidMap.map (fmap f) . unMap++mapWithKey :: (k -> v1 -> v2) -> Map k v1 -> Map k v2+mapWithKey f = Map . MonoidMap.mapWithKey (fmap . f) . unMap  mapAccumL :: (s -> v1 -> (s, v2)) -> s -> Map k v1 -> (s, Map k v2) mapAccumL f s m = Map <$> MonoidMap.mapAccumL (accum f) s (unMap m)
src/internal/Data/MonoidMap/Internal.hs view
@@ -65,6 +65,7 @@     , map     , mapKeys     , mapKeysWith+    , mapWithKey      -- ** Folding     , foldl@@ -1004,6 +1005,28 @@     -> MonoidMap k1 v     -> MonoidMap k2 v mapKeysWith combine fk = fromListWith combine . fmap (B.first fk) . toList++-- | \(O(n)\). Applies a key-dependent function to all non-'C.null' values of+--   a 'MonoidMap'.+--+-- Satisfies the following properties for all functions __@f@__:+--+-- @+-- ('nonNullKey' k m) ==> ('get' k ('mapWithKey' f m) '==' f k ('get' k m))+-- (   'nullKey' k m) ==> ('get' k ('mapWithKey' f m) '==' 'mempty'       )+-- @+--+-- @since 0.0.3.0+--+mapWithKey+    :: MonoidNull v2+    => (k -> v1 -> v2)+    -> MonoidMap k v1+    -> MonoidMap k v2+mapWithKey f (MonoidMap m) =+    MonoidMap . runIdentity $+    Map.traverseMaybeWithKey+        (\k v -> Identity $ maybeNonNull $ applyNonNull (f k) v) m  -------------------------------------------------------------------------------- -- Lazy folding
src/public/Data/MonoidMap.hs view
@@ -64,6 +64,7 @@     , map     , mapKeys     , mapKeysWith+    , mapWithKey      -- ** Folding     , foldl
src/test/Data/MonoidMap/MapSpec.hs view
@@ -71,6 +71,18 @@     it "prop_mapKeysWith_asList" $         prop_mapKeysWith_asList             @k @v & property+    it "prop_mapWithKey_asList" $+        prop_mapWithKey_asList+            @k @v & property+    it "prop_mapWithKey_get" $+        prop_mapWithKey_get+            @k @v & property+    it "prop_mapWithKey_get_total" $+        prop_mapWithKey_get_total+            @k @v & property+    it "prop_mapWithKey_get_total_failure" $+        prop_mapWithKey_get_total_failure+            @k @v & property  -------------------------------------------------------------------------------- -- Mapping@@ -206,6 +218,68 @@         "0 < nonNullCount n && nonNullCount n < nonNullCount m"   where     n = MonoidMap.mapKeysWith c f m++prop_mapWithKey_asList+    :: Test k v+    => Fun (k, v) v+    -> MonoidMap k v+    -> Property+prop_mapWithKey_asList (applyFun2 -> f) m =+    n ===+        ( MonoidMap.fromList+        . fmap (\(k, v) -> (k, (f k v)))+        . MonoidMap.toList+        $ m+        )+    & cover 2+        (0 < nonNullCount n && nonNullCount n < nonNullCount m)+        "0 < nonNullCount n && nonNullCount n < nonNullCount m"+  where+    n = MonoidMap.mapWithKey f m++prop_mapWithKey_get+    :: Test k v+    => Fun (k, v) v+    -> k+    -> MonoidMap k v+    -> Property+prop_mapWithKey_get (applyFun2 -> f) k m =+    MonoidMap.get k (MonoidMap.mapWithKey f m)+    ===+    (if MonoidMap.nullKey k m then mempty else f k (MonoidMap.get k m))+    & cover 2+        (MonoidMap.nullKey k m)+        "MonoidMap.nullKey k m"+    & cover 2+        (MonoidMap.nonNullKey k m)+        "MonoidMap.nonNullKey k m"++prop_mapWithKey_get_total+    :: forall k v. Test k v+    => Fun (k, v) v+    -> k+    -> MonoidMap k v+    -> Property+prop_mapWithKey_get_total (applyFun2 -> f0) k m =+    MonoidMap.get k (MonoidMap.mapWithKey f m) === f k (MonoidMap.get k m)+    & cover 2+        (MonoidMap.nullKey k m)+        "MonoidMap.nullKey k m"+    & cover 2+        (MonoidMap.nonNullKey k m)+        "MonoidMap.nonNullKey k m"+  where+    f = toNullPreservingFn . f0++prop_mapWithKey_get_total_failure+    :: Test k v+    => Fun (k, v) v+    -> k+    -> MonoidMap k v+    -> Property+prop_mapWithKey_get_total_failure (applyFun2 -> f) k m =+    expectFailure $+    MonoidMap.get k (MonoidMap.mapWithKey f m) === f k (MonoidMap.get k m)  -------------------------------------------------------------------------------- -- Utilities
src/test/Data/MonoidMap/ValiditySpec.hs view
@@ -192,6 +192,9 @@     it "propValid_mapKeysWith" $         propValid_mapKeysWith             @k @v & property+    it "propValid_mapWithKey" $+        propValid_mapWithKey+            @k @v & property     it "propValid_mapAccumL" $         propValid_mapAccumL             @k @v & property@@ -503,6 +506,11 @@     :: Test k v => Fun (v, v) v -> Fun k k -> MonoidMap k v -> Property propValid_mapKeysWith (applyFun2 -> f) (applyFun -> g) m =     propValid (MonoidMap.mapKeysWith f g m)++propValid_mapWithKey+    :: Test k v => Fun (k, v) v -> MonoidMap k v -> Property+propValid_mapWithKey (applyFun2 -> f) m =+    propValid (MonoidMap.mapWithKey f m)  propValid_mapAccumL     :: forall k v s. s ~ Int
src/test/Examples/RecoveredMapSpec.hs view
@@ -189,6 +189,9 @@             it "prop_map_mempty" $                 prop_map_mempty                     @k @v @v & property+            it "prop_mapWithKey" $+                prop_mapWithKey+                    @k @v @v & property          describe "MapAccumL" $ do             it "prop_mapAccumL @Int" $@@ -497,6 +500,16 @@     (===)         (RMap.toList (RMap.map (const (mempty @v2)) (RMap.fromList kvs)))         (OMap.toList (OMap.map (const (mempty @v2)) (OMap.fromList kvs)))++prop_mapWithKey+    :: (Ord k, Show k, Eq v2, Show v2)+    => [(k, v1)]+    -> Fun (k, v1) v2+    -> Property+prop_mapWithKey kvs (applyFun2 -> f) =+    (===)+        (RMap.toList (RMap.mapWithKey f (RMap.fromList kvs)))+        (OMap.toList (OMap.mapWithKey f (OMap.fromList kvs)))  -------------------------------------------------------------------------------- -- MapAccum