packages feed

monoidmap-internal 0.0.0.1 → 0.1.0.0

raw patch · 4 files changed

+163/−3 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Data.MonoidMap.Internal: instance (Data.Data.Data k, Data.Data.Data v, GHC.Classes.Ord k, Data.Monoid.Null.MonoidNull v) => Data.Data.Data (Data.MonoidMap.Internal.MonoidMap k v)

Files

CHANGELOG.md view
@@ -1,3 +1,7 @@+# 0.1.0.0++- Made `MonoidMap` an instance of both `Typeable` and `Data`.+ # 0.0.0.1  - Revised version bounds of dependencies.
components/monoidmap-internal/Data/MonoidMap/Internal.hs view
@@ -164,6 +164,15 @@     ( Bifoldable ) import Data.Coerce     ( coerce )+import Data.Data+    ( Constr+    , Data (dataCast2, dataTypeOf, gfoldl, gunfold, toConstr)+    , DataType+    , Fixity (Prefix)+    , gcast2+    , mkConstr+    , mkDataType+    ) import Data.Function     ( (&) ) import Data.Functor.Classes@@ -204,6 +213,8 @@     ) import Data.Set     ( Set )+import Data.Typeable+    ( Typeable ) import GHC.Exts     ( IsList (Item) ) import NoThunks.Class@@ -232,7 +243,7 @@ --------------------------------------------------------------------------------  newtype MonoidMap k v = MonoidMap (Map k (NonNull v))-    deriving (Eq, Show, NFData, NoThunks)+    deriving (Eq, Show, NFData, NoThunks, Typeable)         via Map k v     deriving (Eq1, Show1, Foldable)         via Map k@@ -277,6 +288,28 @@     Read (MonoidMap k v)   where     readPrec = fromMap <$> readPrec++--------------------------------------------------------------------------------+-- Instances: Data+--------------------------------------------------------------------------------++-- This implementation is closely based on the 'Data' instance for 'Map'+-- provided by the 'containers' package (version 0.8).+--+instance (Data k, Data v, Ord k, MonoidNull v) => Data (MonoidMap k v) where+    dataTypeOf _ = dataType+    dataCast2 f = gcast2 f+    gfoldl f z m = z fromList `f` toList m+    gunfold k z c+        | c == fromListConstr = k (z fromList)+        | otherwise = error "gunfold MonoidMap: unexpected constructor"+    toConstr _ = fromListConstr++dataType :: DataType+dataType = mkDataType "Data.MonoidMap.Internal.MonoidMap" [fromListConstr]++fromListConstr :: Constr+fromListConstr = mkConstr dataType "fromList" [] Prefix  -------------------------------------------------------------------------------- -- Instances: Semigroup and subclasses
components/monoidmap-test/Data/MonoidMap/Internal/ExampleSpec.hs view
@@ -1,4 +1,6 @@+{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE OverloadedLists #-}+{-# LANGUAGE RankNTypes #-} {-# OPTIONS_GHC -fno-warn-orphans #-} {- HLINT ignore "Redundant bracket" -} {- HLINT ignore "Use camelCase" -}@@ -14,10 +16,14 @@ import Prelude hiding     ( gcd, lcm ) +import Data.Data+    ( Data, cast, gmapT ) import Data.Function     ( (&) ) import Data.Group     ( Group (..) )+import Data.Maybe+    ( fromMaybe ) import Data.Monoid     ( Product (..), Sum (..) ) import Data.Monoid.GCD@@ -66,6 +72,18 @@         exampleSpec_disjoint_Sum_Natural         exampleSpec_disjoint_Set_Natural +    describe "Data" $ do++        exampleSpec_gmapT_keys_id+        exampleSpec_gmapT_keys_div_2+        exampleSpec_gmapT_keys_mod_2+        exampleSpec_gmapT_keys_mul_2++        exampleSpec_gmapT_values_id+        exampleSpec_gmapT_values_div_2+        exampleSpec_gmapT_values_mod_2+        exampleSpec_gmapT_values_mul_2+     describe "Intersection" $ do          exampleSpec_intersectionWith_min_Sum_Natural@@ -328,6 +346,111 @@     m = MonoidMap.fromList . zip [A ..] . fmap Set.fromList  --------------------------------------------------------------------------------+-- Data+--------------------------------------------------------------------------------++exampleSpec_gmapT_keys_id :: Spec+exampleSpec_gmapT_keys_id =+    unitTestSpec "gmapT_keys" "id"+    (mapNaturals id)+    (unitTestData1+      [ ( [(1, "a"), (2, "b"), (3, "c"), (4, "d")] :: MonoidMap Natural String+        , [(1, "a"), (2, "b"), (3, "c"), (4, "d")] :: MonoidMap Natural String+        )+      ]+    )++exampleSpec_gmapT_keys_div_2 :: Spec+exampleSpec_gmapT_keys_div_2 =+    unitTestSpec "gmapT_keys" "div_2"+    (mapNaturals (`div` 2))+    (unitTestData1+      [ ( [(2, "a"), (4, "b"), (6, "c"), (8, "d")] :: MonoidMap Natural String+        , [(1, "a"), (2, "b"), (3, "c"), (4, "d")] :: MonoidMap Natural String+        )+      ]+    )++exampleSpec_gmapT_keys_mod_2 :: Spec+exampleSpec_gmapT_keys_mod_2 =+    unitTestSpec "gmapT_keys" "mod_2"+    (mapNaturals (`mod` 2))+    (unitTestData1+      [ ( [(0, "a"), (2, "b"), (1, "c"), (3, "d")] :: MonoidMap Natural String+        , [(0, "a"    <> "b"), (1, "c"    <> "d")] :: MonoidMap Natural String+        )+      ]+    )++exampleSpec_gmapT_keys_mul_2 :: Spec+exampleSpec_gmapT_keys_mul_2 =+    unitTestSpec "gmapT_keys" "mul_2"+    (mapNaturals (* 2))+    (unitTestData1+      [ ( [(1, "a"), (2, "b"), (3, "c"), (4, "d")] :: MonoidMap Natural String+        , [(2, "a"), (4, "b"), (6, "c"), (8, "d")] :: MonoidMap Natural String+        )+      ]+    )++exampleSpec_gmapT_values_id :: Spec+exampleSpec_gmapT_values_id =+    unitTestSpec "gmapT_values" "id"+    (mapNaturals id)+    (unitTestData1+      [ ( [(A, 1), (B, 2), (C, 3), (D, 4)] :: MonoidMap LatinChar (Sum Natural)+        , [(A, 1), (B, 2), (C, 3), (D, 4)] :: MonoidMap LatinChar (Sum Natural)+        )+      ]+    )++exampleSpec_gmapT_values_div_2 :: Spec+exampleSpec_gmapT_values_div_2 =+    unitTestSpec "gmapT_values" "div_2"+    (mapNaturals (`div` 2))+    (unitTestData1+      [ ( [(A, 2), (B, 4), (C, 6), (D, 8)] :: MonoidMap LatinChar (Sum Natural)+        , [(A, 1), (B, 2), (C, 3), (D, 4)] :: MonoidMap LatinChar (Sum Natural)+        )+      ]+    )++exampleSpec_gmapT_values_mod_2 :: Spec+exampleSpec_gmapT_values_mod_2 =+    unitTestSpec "gmapT_values" "mod_2"+    (mapNaturals (`mod` 2))+    (unitTestData1+      [ ( [(A, 1), (B, 2), (C, 3), (D, 4)] :: MonoidMap LatinChar (Sum Natural)+        , [(A, 1),         (C, 1)        ] :: MonoidMap LatinChar (Sum Natural)+        )+      ]+    )++exampleSpec_gmapT_values_mul_2 :: Spec+exampleSpec_gmapT_values_mul_2 =+    unitTestSpec "gmapT_values" "mul_2"+    (mapNaturals (* 2))+    (unitTestData1+      [ ( [(A, 1), (B, 2), (C, 3), (D, 4)] :: MonoidMap LatinChar (Sum Natural)+        , [(A, 2), (B, 4), (C, 6), (D, 8)] :: MonoidMap LatinChar (Sum Natural)+        )+      ]+    )++mapNaturals :: Data a => (Natural -> Natural) -> a -> a+mapNaturals f =+    everywhereT $ \x ->+        case (cast x) of+            Just (n :: Natural) ->+                fromMaybe+                    (error "mapNaturals")+                    (cast (f n))+            Nothing -> x++everywhereT :: Data a => (forall b. Data b => b -> b) -> a -> a+everywhereT f x = f (gmapT (everywhereT f) x)++-------------------------------------------------------------------------------- -- Intersection -------------------------------------------------------------------------------- @@ -1735,4 +1858,4 @@ data LatinChar     = A | B | C | D | E | F | G | H | I | J | K | L | M     | N | O | P | Q | R | S | T | U | V | W | X | Y | Z-    deriving (Bounded, Enum, Eq, Ord, Show)+    deriving (Bounded, Enum, Eq, Ord, Show, Data)
monoidmap-internal.cabal view
@@ -1,6 +1,6 @@ cabal-version:  3.0 name:           monoidmap-internal-version:        0.0.0.1+version:        0.1.0.0 bug-reports:    https://github.com/jonathanknowles/monoidmap-internal/issues license:        Apache-2.0 license-file:   LICENSE