@@ -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