git.iko.soy/monoidal-containers
on master help sign in
#12 Unhide constructors and added a selector accessor
commita364a3a9870d46822dbeb4dc342f853caca14805 authorLouis Pan <louis@pan.me> dateMon 1 Aug 2016, 11:38 (10 years ago) parent10b12b7
3 files changed+52−52
src/Data/HashMap/Monoidal.hs+16−16 src/Data/Map/Monoidal.hs+18−18 src/Data/Map/Monoidal/Strict.hs+18−18
src/Data/HashMap/Monoidal.hs+16−16
@@ -55,7 +55,7 @@ import Control.Lens
5555import Control.Newtype
5656
5757-- | A 'HashMap' with monoidal accumulation
58−newtype MonoidalHashMap k a = MM (M.HashMap k a)
58+newtype MonoidalHashMap k a = MonoidalHashMap { getMonoidalHashMap :: M.HashMap k a }
5959 deriving (Show, Read, Functor, Eq, NFData,
6060 Foldable, Traversable,
6161 Data, Typeable)
@@ -63,15 +63,15 @@ newtype MonoidalHashMap k a = MM (M.HashMap k a)
6363type instance Index (MonoidalHashMap k a) = k
6464type instance IxValue (MonoidalHashMap k a) = a
6565instance (Eq k, Hashable k) => Ixed (MonoidalHashMap k a) where
66− ix k f (MM m) = case M.lookup k m of
67− Just v -> f v <&> \v' -> MM (M.insert k v' m)
68− Nothing -> pure (MM m)
66+ ix k f (MonoidalHashMap m) = case M.lookup k m of
67+ Just v -> f v <&> \v' -> MonoidalHashMap (M.insert k v' m)
68+ Nothing -> pure (MonoidalHashMap m)
6969 {-# INLINE ix #-}
7070
7171instance (Eq k, Hashable k) => At (MonoidalHashMap k a) where
72− at k f (MM m) = f mv <&> \r -> case r of
73− Nothing -> maybe (MM m) (const (MM $ M.delete k m)) mv
74− Just v' -> MM $ M.insert k v' m
72+ at k f (MonoidalHashMap m) = f mv <&> \r -> case r of
73+ Nothing -> maybe (MonoidalHashMap m) (const (MonoidalHashMap $ M.delete k m)) mv
74+ Just v' -> MonoidalHashMap $ M.insert k v' m
7575 where mv = M.lookup k m
7676 {-# INLINE at #-}
7777
@@ -80,11 +80,11 @@ instance Each (MonoidalHashMap k a) (MonoidalHashMap k b) a b
8080instance (Eq k, Hashable k) => FunctorWithIndex k (MonoidalHashMap k)
8181instance (Eq k, Hashable k) => FoldableWithIndex k (MonoidalHashMap k)
8282instance (Eq k, Hashable k) => TraversableWithIndex k (MonoidalHashMap k) where
83− itraverse f (MM m) = fmap MM $ itraverse f m
83+ itraverse f (MonoidalHashMap m) = fmap MonoidalHashMap $ itraverse f m
8484 {-# INLINE itraverse #-}
8585
8686instance AsEmpty (MonoidalHashMap k a) where
87− _Empty = nearly (MM M.empty) (M.null . unpack)
87+ _Empty = nearly (MonoidalHashMap M.empty) (M.null . unpack)
8888 {-# INLINE _Empty #-}
8989
9090instance Wrapped (MonoidalHashMap k a) where
@@ -93,21 +93,21 @@ instance Wrapped (MonoidalHashMap k a) where
9393 {-# INLINE _Wrapped' #-}
9494
9595instance (Eq k, Hashable k, Monoid a) => Monoid (MonoidalHashMap k a) where
96− mempty = MM mempty
96+ mempty = MonoidalHashMap mempty
9797 {-# INLINE mempty #-}
98− MM a `mappend` MM b = MM $ M.unionWith mappend a b
98+ MonoidalHashMap a `mappend` MonoidalHashMap b = MonoidalHashMap $ M.unionWith mappend a b
9999 {-# INLINE mappend #-}
100100
101101instance Newtype (MonoidalHashMap k a) (M.HashMap k a) where
102− pack = MM
102+ pack = MonoidalHashMap
103103 {-# INLINE pack #-}
104− unpack (MM a) = a
104+ unpack (MonoidalHashMap a) = a
105105 {-# INLINE unpack #-}
106106
107107#if MIN_VERSION_base(4,7,0)
108108instance (Eq k, Hashable k, Monoid a) => Exts.IsList (MonoidalHashMap k a) where
109109 type Item (MonoidalHashMap k a) = (k, a)
110− fromList = MM . M.fromListWith mappend
110+ fromList = MonoidalHashMap . M.fromListWith mappend
111111 {-# INLINE fromList #-}
112112 toList = M.toList . unpack
113113 {-# INLINE toList #-}
@@ -115,7 +115,7 @@ instance (Eq k, Hashable k, Monoid a) => Exts.IsList (MonoidalHashMap k a) where
115115
116116-- | /O(1)/. A map with a single element.
117117singleton :: (Eq k, Hashable k) => k -> a -> MonoidalHashMap k a
118−singleton k a = MM $ M.singleton k a
118+singleton k a = MonoidalHashMap $ M.singleton k a
119119{-# INLINE singleton #-}
120120
121121-- | /O(1)/. The number of elements in the map.
@@ -148,7 +148,7 @@ lookupM k = fromMaybe mempty . M.lookup k . unpack
148148-- | /O(log n)/. Delete a key and its value from the map. When the key is not
149149-- a member of the map, the original map is returned.
150150delete :: (Eq k, Hashable k) => k -> MonoidalHashMap k a -> MonoidalHashMap k a
151−delete k = _Wrapping' MM %~ M.delete k
151+delete k = _Wrapping' MonoidalHashMap %~ M.delete k
152152{-# INLINE delete #-}
153153
154154-- | /O(n)/.
src/Data/Map/Monoidal.hs+18−18
@@ -45,7 +45,7 @@ import Control.Lens
4545import Control.Newtype
4646
4747-- | A 'Map' with monoidal accumulation
48−newtype MonoidalMap k a = MM (M.Map k a)
48+newtype MonoidalMap k a = MonoidalMap { getMonoidalMap :: M.Map k a }
4949 deriving (Show, Read, Functor, Eq, Ord, NFData,
5050 Foldable, Traversable,
5151 Data, Typeable)
@@ -53,15 +53,15 @@ newtype MonoidalMap k a = MM (M.Map k a)
5353type instance Index (MonoidalMap k a) = k
5454type instance IxValue (MonoidalMap k a) = a
5555instance Ord k => Ixed (MonoidalMap k a) where
56− ix k f (MM m) = case M.lookup k m of
57− Just v -> f v <&> \v' -> MM (M.insert k v' m)
58− Nothing -> pure (MM m)
56+ ix k f (MonoidalMap m) = case M.lookup k m of
57+ Just v -> f v <&> \v' -> MonoidalMap (M.insert k v' m)
58+ Nothing -> pure (MonoidalMap m)
5959 {-# INLINE ix #-}
6060
6161instance Ord k => At (MonoidalMap k a) where
62− at k f (MM m) = f mv <&> \r -> case r of
63− Nothing -> maybe (MM m) (const (MM $ M.delete k m)) mv
64− Just v' -> MM $ M.insert k v' m
62+ at k f (MonoidalMap m) = f mv <&> \r -> case r of
63+ Nothing -> maybe (MonoidalMap m) (const (MonoidalMap $ M.delete k m)) mv
64+ Just v' -> MonoidalMap $ M.insert k v' m
6565 where mv = M.lookup k m
6666 {-# INLINE at #-}
6767
@@ -70,18 +70,18 @@ instance Each (MonoidalMap k a) (MonoidalMap k b) a b
7070instance Ord k => FunctorWithIndex k (MonoidalMap k)
7171instance Ord k => FoldableWithIndex k (MonoidalMap k)
7272instance Ord k => TraversableWithIndex k (MonoidalMap k) where
73− itraverse f (MM m) = fmap MM $ itraverse f m
73+ itraverse f (MonoidalMap m) = fmap MonoidalMap $ itraverse f m
7474 {-# INLINE itraverse #-}
7575
7676instance Ord k => TraverseMin k (MonoidalMap k) where
77− traverseMin f (MM m) = fmap MM $ traverseMin f m
77+ traverseMin f (MonoidalMap m) = fmap MonoidalMap $ traverseMin f m
7878 {-# INLINE traverseMin #-}
7979instance Ord k => TraverseMax k (MonoidalMap k) where
80− traverseMax f (MM m) = fmap MM $ traverseMax f m
80+ traverseMax f (MonoidalMap m) = fmap MonoidalMap $ traverseMax f m
8181 {-# INLINE traverseMax #-}
8282
8383instance AsEmpty (MonoidalMap k a) where
84− _Empty = nearly (MM M.empty) (M.null . unpack)
84+ _Empty = nearly (MonoidalMap M.empty) (M.null . unpack)
8585 {-# INLINE _Empty #-}
8686
8787instance Wrapped (MonoidalMap k a) where
@@ -90,21 +90,21 @@ instance Wrapped (MonoidalMap k a) where
9090 {-# INLINE _Wrapped' #-}
9191
9292instance (Ord k, Monoid a) => Monoid (MonoidalMap k a) where
93− mempty = MM mempty
93+ mempty = MonoidalMap mempty
9494 {-# INLINE mempty #-}
95− MM a `mappend` MM b = MM $ M.unionWith mappend a b
95+ MonoidalMap a `mappend` MonoidalMap b = MonoidalMap $ M.unionWith mappend a b
9696 {-# INLINE mappend #-}
9797
9898instance Newtype (MonoidalMap k a) (M.Map k a) where
99− pack = MM
99+ pack = MonoidalMap
100100 {-# INLINE pack #-}
101− unpack (MM a) = a
101+ unpack (MonoidalMap a) = a
102102 {-# INLINE unpack #-}
103103
104104#if MIN_VERSION_base(4,7,0)
105105instance (Ord k, Monoid a) => IsList (MonoidalMap k a) where
106106 type Item (MonoidalMap k a) = (k, a)
107− fromList = MM . M.fromListWith mappend
107+ fromList = MonoidalMap . M.fromListWith mappend
108108 {-# INLINE fromList #-}
109109 toList = M.toList . unpack
110110 {-# INLINE toList #-}
@@ -112,7 +112,7 @@ instance (Ord k, Monoid a) => IsList (MonoidalMap k a) where
112112
113113-- | /O(1)/. A map with a single element.
114114singleton :: Ord k => k -> a -> MonoidalMap k a
115−singleton k a = MM $ M.singleton k a
115+singleton k a = MonoidalMap $ M.singleton k a
116116{-# INLINE singleton #-}
117117
118118-- | /O(1)/. The number of elements in the map.
@@ -140,7 +140,7 @@ findWithDefault def k = M.findWithDefault def k . unpack
140140-- | /O(log n)/. Delete a key and its value from the map. When the key is not
141141-- a member of the map, the original map is returned.
142142delete :: Ord k => k -> MonoidalMap k a -> MonoidalMap k a
143−delete k = _Wrapping' MM %~ M.delete k
143+delete k = _Wrapping' MonoidalMap %~ M.delete k
144144{-# INLINE delete #-}
145145
146146-- | /O(n)/. Return all elements of the map and their keys
src/Data/Map/Monoidal/Strict.hs+18−18
@@ -45,7 +45,7 @@ import Control.Lens
4545import Control.Newtype
4646
4747-- | A 'Map' with monoidal accumulation
48−newtype MonoidalMap k a = MM (M.Map k a)
48+newtype MonoidalMap k a = MonoidalMap { getMonoidalMap :: M.Map k a }
4949 deriving (Show, Read, Functor, Eq, Ord, NFData,
5050 Foldable, Traversable,
5151 Data, Typeable)
@@ -53,15 +53,15 @@ newtype MonoidalMap k a = MM (M.Map k a)
5353type instance Index (MonoidalMap k a) = k
5454type instance IxValue (MonoidalMap k a) = a
5555instance Ord k => Ixed (MonoidalMap k a) where
56− ix k f (MM m) = case M.lookup k m of
57− Just v -> f v <&> \v' -> MM (M.insert k v' m)
58− Nothing -> pure (MM m)
56+ ix k f (MonoidalMap m) = case M.lookup k m of
57+ Just v -> f v <&> \v' -> MonoidalMap (M.insert k v' m)
58+ Nothing -> pure (MonoidalMap m)
5959 {-# INLINE ix #-}
6060
6161instance Ord k => At (MonoidalMap k a) where
62− at k f (MM m) = f mv <&> \r -> case r of
63− Nothing -> maybe (MM m) (const (MM $ M.delete k m)) mv
64− Just v' -> MM $ M.insert k v' m
62+ at k f (MonoidalMap m) = f mv <&> \r -> case r of
63+ Nothing -> maybe (MonoidalMap m) (const (MonoidalMap $ M.delete k m)) mv
64+ Just v' -> MonoidalMap $ M.insert k v' m
6565 where mv = M.lookup k m
6666 {-# INLINE at #-}
6767
@@ -70,18 +70,18 @@ instance Each (MonoidalMap k a) (MonoidalMap k b) a b
7070instance Ord k => FunctorWithIndex k (MonoidalMap k)
7171instance Ord k => FoldableWithIndex k (MonoidalMap k)
7272instance Ord k => TraversableWithIndex k (MonoidalMap k) where
73− itraverse f (MM m) = fmap MM $ itraverse f m
73+ itraverse f (MonoidalMap m) = fmap MonoidalMap $ itraverse f m
7474 {-# INLINE itraverse #-}
7575
7676instance Ord k => TraverseMin k (MonoidalMap k) where
77− traverseMin f (MM m) = fmap MM $ traverseMin f m
77+ traverseMin f (MonoidalMap m) = fmap MonoidalMap $ traverseMin f m
7878 {-# INLINE traverseMin #-}
7979instance Ord k => TraverseMax k (MonoidalMap k) where
80− traverseMax f (MM m) = fmap MM $ traverseMax f m
80+ traverseMax f (MonoidalMap m) = fmap MonoidalMap $ traverseMax f m
8181 {-# INLINE traverseMax #-}
8282
8383instance AsEmpty (MonoidalMap k a) where
84− _Empty = nearly (MM M.empty) (M.null . unpack)
84+ _Empty = nearly (MonoidalMap M.empty) (M.null . unpack)
8585 {-# INLINE _Empty #-}
8686
8787instance Wrapped (MonoidalMap k a) where
@@ -90,21 +90,21 @@ instance Wrapped (MonoidalMap k a) where
9090 {-# INLINE _Wrapped' #-}
9191
9292instance (Ord k, Monoid a) => Monoid (MonoidalMap k a) where
93− mempty = MM mempty
93+ mempty = MonoidalMap mempty
9494 {-# INLINE mempty #-}
95− MM a `mappend` MM b = MM $ M.unionWith mappend a b
95+ MonoidalMap a `mappend` MonoidalMap b = MonoidalMap $ M.unionWith mappend a b
9696 {-# INLINE mappend #-}
9797
9898instance Newtype (MonoidalMap k a) (M.Map k a) where
99− pack = MM
99+ pack = MonoidalMap
100100 {-# INLINE pack #-}
101− unpack (MM a) = a
101+ unpack (MonoidalMap a) = a
102102 {-# INLINE unpack #-}
103103
104104#if MIN_VERSION_base(4,7,0)
105105instance (Ord k, Monoid a) => IsList (MonoidalMap k a) where
106106 type Item (MonoidalMap k a) = (k, a)
107− fromList = MM . M.fromListWith mappend
107+ fromList = MonoidalMap . M.fromListWith mappend
108108 {-# INLINE fromList #-}
109109 toList = M.toList . unpack
110110 {-# INLINE toList #-}
@@ -112,7 +112,7 @@ instance (Ord k, Monoid a) => IsList (MonoidalMap k a) where
112112
113113-- | /O(1)/. A map with a single element.
114114singleton :: Ord k => k -> a -> MonoidalMap k a
115−singleton k a = MM $ M.singleton k a
115+singleton k a = MonoidalMap $ M.singleton k a
116116{-# INLINE singleton #-}
117117
118118-- | /O(1)/. The number of elements in the map.
@@ -140,7 +140,7 @@ findWithDefault def k = M.findWithDefault def k . unpack
140140-- | /O(log n)/. Delete a key and its value from the map. When the key is not
141141-- a member of the map, the original map is returned.
142142delete :: Ord k => k -> MonoidalMap k a -> MonoidalMap k a
143−delete k = _Wrapping' MM %~ M.delete k
143+delete k = _Wrapping' MonoidalMap %~ M.delete k
144144{-# INLINE delete #-}
145145
146146-- | /O(n)/. Return all elements of the map and their keys