on 019b569 help sign in
patch/src/Data/AppendMap.hs
370 lines 18 kB history raw
1{-# LANGUAGE CPP #-}
2{-# LANGUAGE DeriveFunctor #-}
3{-# LANGUAGE DeriveGeneric #-}
4{-# LANGUAGE DeriveTraversable #-}
5{-# LANGUAGE FlexibleContexts #-}
6{-# LANGUAGE FlexibleInstances #-}
7{-# LANGUAGE GeneralizedNewtypeDeriving #-}
8{-# LANGUAGE MultiParamTypeClasses #-}
9{-# LANGUAGE PatternSynonyms #-}
10{-# LANGUAGE RoleAnnotations #-}
11{-# LANGUAGE ScopedTypeVariables #-}
12{-# LANGUAGE StandaloneDeriving #-}
13{-# LANGUAGE TypeFamilies #-}
14{-# OPTIONS_GHC -fno-warn-orphans #-}
15-- | 'Data.Map' with a better 'Monoid' instance
16--
17-- 'Data.Map' has @mappend = union@, which is left-biased. AppendMap has
18-- @mappend = unionWith mappend@ instead.
19module Data.AppendMap
20 ( module Data.AppendMap
21 , module Data.Map.Monoidal
22 ) where
24import Prelude hiding (map)
26import Data.Align
27import Data.Coerce
28import Data.Default
29import Data.Map (Map)
30import qualified Data.Map as Map
31import Data.Map.Monoidal
32import Data.Semigroup
33import Data.Set (Set)
34import Reflex.Class (FunctorMaybe (..))
35import Reflex.Patch (Additive, Group (..))
37{-# DEPRECATED AppendMap "Use 'MonoidalMap' instead" #-}
38type AppendMap = MonoidalMap
40{-# DEPRECATED _unAppendMap "Use 'getMonoidalMap' instead" #-}
41_unAppendMap :: MonoidalMap k v -> Map k v
42_unAppendMap = getMonoidalMap
44pattern AppendMap :: Map k v -> MonoidalMap k v
45pattern AppendMap m = MonoidalMap m
47deriving instance Ord k => Align (MonoidalMap k)
49instance FunctorMaybe (MonoidalMap k) where
50 fmapMaybe = mapMaybe
52-- | Deletes a key, returning 'Nothing' if the result is empty.
53nonEmptyDelete :: Ord k => k -> MonoidalMap k a -> Maybe (MonoidalMap k a)
54nonEmptyDelete k vs =
55 let deleted = delete k vs
56 in if Data.AppendMap.null deleted
57 then Nothing
58 else Just deleted
60mapMaybeNoNull :: (a -> Maybe b)
61 -> MonoidalMap token a
62 -> Maybe (MonoidalMap token b)
63mapMaybeNoNull f as =
64 let bs = fmapMaybe f as
65 in if Data.AppendMap.null bs
66 then Nothing
67 else Just bs
69#if !MIN_VERSION_monoidal_containers(0,3,1)
70instance (Ord k, Semigroup v) => Semigroup (MonoidalMap k v) where
71 MonoidalMap a <> MonoidalMap b = MonoidalMap $ Map.unionWith (<>) a b
72#endif
74instance (Ord k, Group q) => Group (MonoidalMap k q) where
75 negateG = map negateG
77instance (Ord k, Additive q) => Additive (MonoidalMap k q)
79(!) :: forall k a. Ord k => MonoidalMap k a -> k -> a
80(!) = coerce ((Map.!) :: Map k a -> k -> a)
81infixl 9 !
83(\\) :: forall k a b. Ord k => MonoidalMap k a -> MonoidalMap k b -> MonoidalMap k a
84(\\) = coerce ((Map.\\) :: Map k a -> Map k b -> Map k a)
85infixl 9 {-"-} \\ {-"-} --These comments prevent the C preprocssor from complaining
87null :: forall k a. MonoidalMap k a -> Bool
88null = coerce (Map.null :: Map k a -> Bool)
90lookup :: forall k a. Ord k => k -> MonoidalMap k a -> Maybe a
91lookup = coerce (Map.lookup :: k -> Map k a -> Maybe a)
93lookupLT :: forall k a. Ord k => k -> MonoidalMap k a -> Maybe (k, a)
94lookupLT = coerce (Map.lookupLT :: k -> Map k a -> Maybe (k,a))
96lookupGT :: forall k a. Ord k => k -> MonoidalMap k a -> Maybe (k, a)
97lookupGT = coerce (Map.lookupGT :: k -> Map k a -> Maybe (k,a))
99lookupLE :: forall k a. Ord k => k -> MonoidalMap k a -> Maybe (k, a)
100lookupLE = coerce (Map.lookupLE :: k -> Map k a -> Maybe (k,a))
102lookupGE :: forall k a. Ord k => k -> MonoidalMap k a -> Maybe (k, a)
103lookupGE = coerce (Map.lookupGE :: k -> Map k a -> Maybe (k,a))
105empty :: forall k a. MonoidalMap k a
106empty = coerce (Map.empty :: Map k a)
108insert :: forall k a. Ord k => k -> a -> MonoidalMap k a -> MonoidalMap k a
109insert = coerce (Map.insert :: k -> a -> Map k a -> Map k a)
111insertWith :: forall k a. Ord k => (a -> a -> a) -> k -> a -> MonoidalMap k a -> MonoidalMap k a
112insertWith = coerce (Map.insertWith :: (a -> a -> a) -> k -> a -> Map k a -> Map k a)
114insertWithKey :: forall k a. Ord k => (k -> a -> a -> a) -> k -> a -> MonoidalMap k a -> MonoidalMap k a
115insertWithKey = coerce (Map.insertWithKey :: (k -> a -> a -> a) -> k -> a -> Map k a -> Map k a)
117insertLookupWithKey :: forall k a. Ord k => (k -> a -> a -> a) -> k -> a -> MonoidalMap k a -> (Maybe a, MonoidalMap k a)
118insertLookupWithKey = coerce (Map.insertLookupWithKey :: (k -> a -> a -> a) -> k -> a -> Map k a -> (Maybe a, Map k a))
120delete :: forall k a. Ord k => k -> MonoidalMap k a -> MonoidalMap k a
121delete = coerce (Map.delete :: k -> Map k a -> Map k a)
123adjust :: forall k a. Ord k => (a -> a) -> k -> MonoidalMap k a -> MonoidalMap k a
124adjust = coerce (Map.adjust :: (a -> a) -> k -> Map k a -> Map k a)
126adjustWithKey :: forall k a. Ord k => (k -> a -> a) -> k -> MonoidalMap k a -> MonoidalMap k a
127adjustWithKey = coerce (Map.adjustWithKey :: (k -> a -> a) -> k -> Map k a -> Map k a)
129update :: forall k a. Ord k => (a -> Maybe a) -> k -> MonoidalMap k a -> MonoidalMap k a
130update = coerce (Map.update :: (a -> Maybe a) -> k -> Map k a -> Map k a)
132updateWithKey :: forall k a. Ord k => (k -> a -> Maybe a) -> k -> MonoidalMap k a -> MonoidalMap k a
133updateWithKey = coerce (Map.updateWithKey :: (k -> a -> Maybe a) -> k -> Map k a -> Map k a)
135updateLookupWithKey :: forall k a. Ord k => (k -> a -> Maybe a) -> k -> MonoidalMap k a -> (Maybe a, MonoidalMap k a)
136updateLookupWithKey = coerce (Map.updateLookupWithKey :: (k -> a -> Maybe a) -> k -> Map k a -> (Maybe a, Map k a))
138alter :: forall k a. Ord k => (Maybe a -> Maybe a) -> k -> MonoidalMap k a -> MonoidalMap k a
139alter = coerce (Map.alter :: (Maybe a -> Maybe a) -> k -> Map k a -> Map k a)
141unionWith :: forall k a. Ord k => (a -> a -> a) -> MonoidalMap k a -> MonoidalMap k a -> MonoidalMap k a
142unionWith = coerce (Map.unionWith :: (a -> a -> a) -> Map k a -> Map k a -> Map k a)
144unionWithKey :: forall k a. Ord k => (k -> a -> a -> a) -> MonoidalMap k a -> MonoidalMap k a -> MonoidalMap k a
145unionWithKey = coerce (Map.unionWithKey :: (k -> a -> a -> a) -> Map k a -> Map k a -> Map k a)
147unionsWith :: forall k a. Ord k => (a -> a -> a) -> [MonoidalMap k a] -> MonoidalMap k a
148unionsWith = coerce (Map.unionsWith :: (a -> a -> a) -> [Map k a] -> Map k a)
150difference :: forall k a b. Ord k => MonoidalMap k a -> MonoidalMap k b -> MonoidalMap k a
151difference = (\\)
153differenceWith :: forall k a b. Ord k => (a -> b -> Maybe a) -> MonoidalMap k a -> MonoidalMap k b -> MonoidalMap k a
154differenceWith = coerce (Map.differenceWith :: (a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a)
156differenceWithKey :: forall k a b. Ord k => (k -> a -> b -> Maybe a) -> MonoidalMap k a -> MonoidalMap k b -> MonoidalMap k a
157differenceWithKey = coerce (Map.differenceWithKey :: (k -> a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a)
159intersectionWith :: forall k a b c. Ord k => (a -> b -> c) -> MonoidalMap k a -> MonoidalMap k b -> MonoidalMap k c
160intersectionWith = coerce (Map.intersectionWith :: (a -> b -> c) -> Map k a -> Map k b -> Map k c)
162intersectionWithKey :: forall k a b c. Ord k => (k -> a -> b -> c) -> MonoidalMap k a -> MonoidalMap k b -> MonoidalMap k c
163intersectionWithKey = coerce (Map.intersectionWithKey :: (k -> a -> b -> c) -> Map k a -> Map k b -> Map k c)
165mergeWithKey :: forall k a b c. Ord k => (k -> a -> b -> Maybe c) -> (MonoidalMap k a -> MonoidalMap k c) -> (MonoidalMap k b -> MonoidalMap k c) -> MonoidalMap k a -> MonoidalMap k b -> MonoidalMap k c
166mergeWithKey = coerce (Map.mergeWithKey :: (k -> a -> b -> Maybe c) -> (Map k a -> Map k c) -> (Map k b -> Map k c) -> Map k a -> Map k b -> Map k c)
168map :: (a -> b) -> MonoidalMap k a -> MonoidalMap k b
169map = fmap
171mapWithKey :: (k -> a -> b) -> MonoidalMap k a -> MonoidalMap k b
172mapWithKey f (MonoidalMap m) = MonoidalMap $ Map.mapWithKey f m
174traverseWithKey :: Applicative t => (k -> a -> t b) -> MonoidalMap k a -> t (MonoidalMap k b)
175traverseWithKey f (MonoidalMap m) = MonoidalMap <$> Map.traverseWithKey f m
177mapAccum :: forall k a b c. (a -> b -> (a, c)) -> a -> MonoidalMap k b -> (a, MonoidalMap k c)
178mapAccum = coerce (Map.mapAccum :: (a -> b -> (a, c)) -> a -> Map k b -> (a, Map k c))
180mapAccumWithKey :: forall k a b c. (a -> k -> b -> (a, c)) -> a -> MonoidalMap k b -> (a, MonoidalMap k c)
181mapAccumWithKey = coerce (Map.mapAccumWithKey :: (a -> k -> b -> (a, c)) -> a -> Map k b -> (a, Map k c))
183mapAccumRWithKey :: forall k a b c. (a -> k -> b -> (a, c)) -> a -> MonoidalMap k b -> (a, MonoidalMap k c)
184mapAccumRWithKey = coerce (Map.mapAccumRWithKey :: (a -> k -> b -> (a, c)) -> a -> Map k b -> (a, Map k c))
186mapKeys :: forall k1 k2 a. Ord k2 => (k1 -> k2) -> MonoidalMap k1 a -> MonoidalMap k2 a
187mapKeys = coerce (Map.mapKeys :: (k1 -> k2) -> Map k1 a -> Map k2 a)
189mapKeysWith :: forall k1 k2 a. Ord k2 => (a -> a -> a) -> (k1 -> k2) -> MonoidalMap k1 a -> MonoidalMap k2 a
190mapKeysWith = coerce (Map.mapKeysWith :: (a -> a -> a) -> (k1 -> k2) -> Map k1 a -> Map k2 a)
192mapKeysMonotonic :: forall k1 k2 a. (k1 -> k2) -> MonoidalMap k1 a -> MonoidalMap k2 a
193mapKeysMonotonic = coerce (Map.mapKeysMonotonic :: (k1 -> k2) -> Map k1 a -> Map k2 a)
195foldr :: forall k a b. (a -> b -> b) -> b -> MonoidalMap k a -> b
196foldr = coerce (Map.foldr :: (a -> b -> b) -> b -> Map k a -> b)
198foldl :: forall k a b. (a -> b -> a) -> a -> MonoidalMap k b -> a
199foldl = coerce (Map.foldl :: (a -> b -> a) -> a -> Map k b -> a)
201foldrWithKey :: forall k a b. (k -> a -> b -> b) -> b -> MonoidalMap k a -> b
202foldrWithKey = coerce (Map.foldrWithKey :: (k -> a -> b -> b) -> b -> Map k a -> b)
204foldlWithKey :: forall k a b. (a -> k -> b -> a) -> a -> MonoidalMap k b -> a
205foldlWithKey = coerce (Map.foldlWithKey :: (a -> k -> b -> a) -> a -> Map k b -> a)
207foldMapWithKey :: forall k a m. Monoid m => (k -> a -> m) -> MonoidalMap k a -> m
208foldMapWithKey = coerce (Map.foldMapWithKey :: (k -> a -> m) -> Map k a -> m)
210foldr' :: forall k a b. (a -> b -> b) -> b -> MonoidalMap k a -> b
211foldr' = coerce (Map.foldr' :: (a -> b -> b) -> b -> Map k a -> b)
213foldl' :: forall k a b. (a -> b -> a) -> a -> MonoidalMap k b -> a
214foldl' = coerce (Map.foldl' :: (a -> b -> a) -> a -> Map k b -> a)
216foldrWithKey' :: forall k a b. (k -> a -> b -> b) -> b -> MonoidalMap k a -> b
217foldrWithKey' = coerce (Map.foldrWithKey' :: (k -> a -> b -> b) -> b -> Map k a -> b)
219foldlWithKey' :: forall k a b. (a -> k -> b -> a) -> a -> MonoidalMap k b -> a
220foldlWithKey' = coerce (Map.foldlWithKey' :: (a -> k -> b -> a) -> a -> Map k b -> a)
222keysSet :: forall k a. MonoidalMap k a -> Set k
223keysSet = coerce (Map.keysSet :: Map k a -> Set k)
225fromSet :: forall k a. (k -> a) -> Set k -> MonoidalMap k a
226fromSet = coerce (Map.fromSet :: (k -> a) -> Set k -> Map k a)
228toList :: forall k a. MonoidalMap k a -> [(k, a)]
229toList = coerce (Map.toList :: Map k a -> [(k, a)])
231fromList :: forall k a. Ord k => [(k, a)] -> MonoidalMap k a
232fromList = coerce (Map.fromList :: [(k, a)] -> Map k a)
234fromListWith :: forall k a. Ord k => (a -> a -> a) -> [(k, a)] -> MonoidalMap k a
235fromListWith = coerce (Map.fromListWith :: (a -> a -> a) -> [(k, a)] -> Map k a)
237fromListWithKey :: forall k a. Ord k => (k -> a -> a -> a) -> [(k, a)] -> MonoidalMap k a
238fromListWithKey = coerce (Map.fromListWithKey :: (k -> a -> a -> a) -> [(k, a)] -> Map k a)
240toAscList :: forall k a. MonoidalMap k a -> [(k, a)]
241toAscList = coerce (Map.toAscList :: Map k a -> [(k, a)])
243toDescList :: forall k a. MonoidalMap k a -> [(k, a)]
244toDescList = coerce (Map.toDescList :: Map k a -> [(k, a)])
246fromAscList :: forall k a. Eq k => [(k, a)] -> MonoidalMap k a
247fromAscList = coerce (Map.fromAscList :: [(k, a)] -> Map k a)
249fromAscListWith :: forall k a. Eq k => (a -> a -> a) -> [(k, a)] -> MonoidalMap k a
250fromAscListWith = coerce (Map.fromAscListWith :: (a -> a -> a) -> [(k, a)] -> Map k a)
252fromAscListWithKey :: forall k a. Eq k => (k -> a -> a -> a) -> [(k, a)] -> MonoidalMap k a
253fromAscListWithKey = coerce (Map.fromAscListWithKey :: (k -> a -> a -> a) -> [(k, a)] -> Map k a)
255fromDistinctAscList :: forall k a. [(k, a)] -> MonoidalMap k a
256fromDistinctAscList = coerce (Map.fromDistinctAscList :: [(k, a)] -> Map k a)
258filter :: forall k a. (a -> Bool) -> MonoidalMap k a -> MonoidalMap k a
259filter = coerce (Map.filter :: (a -> Bool) -> Map k a -> Map k a)
261filterWithKey :: forall k a. (k -> a -> Bool) -> MonoidalMap k a -> MonoidalMap k a
262filterWithKey = coerce (Map.filterWithKey :: (k -> a -> Bool) -> Map k a -> Map k a)
264partition :: forall k a. (a -> Bool) -> MonoidalMap k a -> (MonoidalMap k a, MonoidalMap k a)
265partition = coerce (Map.partition :: (a -> Bool) -> Map k a -> (Map k a, Map k a))
267partitionWithKey :: forall k a. (k -> a -> Bool) -> MonoidalMap k a -> (MonoidalMap k a, MonoidalMap k a)
268partitionWithKey = coerce (Map.partitionWithKey :: (k -> a -> Bool) -> Map k a -> (Map k a, Map k a))
270mapMaybe :: forall k a b. (a -> Maybe b) -> MonoidalMap k a -> MonoidalMap k b
271mapMaybe = coerce (Map.mapMaybe :: (a -> Maybe b) -> Map k a -> Map k b)
273mapMaybeWithKey :: forall k a b. (k -> a -> Maybe b) -> MonoidalMap k a -> MonoidalMap k b
274mapMaybeWithKey = coerce (Map.mapMaybeWithKey :: (k -> a -> Maybe b) -> Map k a -> Map k b)
276mapEither :: forall k a b c. (a -> Either b c) -> MonoidalMap k a -> (MonoidalMap k b, MonoidalMap k c)
277mapEither = coerce (Map.mapEither :: (a -> Either b c) -> Map k a -> (Map k b, Map k c))
279mapEitherWithKey :: forall k a b c. (k -> a -> Either b c) -> MonoidalMap k a -> (MonoidalMap k b, MonoidalMap k c)
280mapEitherWithKey = coerce (Map.mapEitherWithKey :: (k -> a -> Either b c) -> Map k a -> (Map k b, Map k c))
282split :: forall k a. Ord k => k -> MonoidalMap k a -> (MonoidalMap k a, MonoidalMap k a)
283split = coerce (Map.split :: k -> Map k a -> (Map k a, Map k a))
285splitLookup :: forall k a. Ord k => k -> MonoidalMap k a -> (MonoidalMap k a, Maybe a, MonoidalMap k a)
286splitLookup = coerce (Map.splitLookup :: k -> Map k a -> (Map k a, Maybe a, Map k a))
288splitRoot :: forall k a. MonoidalMap k a -> [MonoidalMap k a]
289splitRoot = coerce (Map.splitRoot :: Map k a -> [Map k a])
291isSubmapOf :: forall k a. (Ord k, Eq a) => MonoidalMap k a -> MonoidalMap k a -> Bool
292isSubmapOf = coerce (Map.isSubmapOf :: Map k a -> Map k a -> Bool)
294isSubmapOfBy :: forall k a b. Ord k => (a -> b -> Bool) -> MonoidalMap k a -> MonoidalMap k b -> Bool
295isSubmapOfBy = coerce (Map.isSubmapOfBy :: (a -> b -> Bool) -> Map k a -> Map k b -> Bool)
297isProperSubmapOf :: forall k a. (Ord k, Eq a) => MonoidalMap k a -> MonoidalMap k a -> Bool
298isProperSubmapOf = coerce (Map.isProperSubmapOf :: Map k a -> Map k a -> Bool)
300isProperSubmapOfBy :: forall k a b. Ord k => (a -> b -> Bool) -> MonoidalMap k a -> MonoidalMap k b -> Bool
301isProperSubmapOfBy = coerce (Map.isProperSubmapOfBy :: (a -> b -> Bool) -> Map k a -> Map k b -> Bool)
303lookupIndex :: forall k a. Ord k => k -> MonoidalMap k a -> Maybe Int
304lookupIndex = coerce (Map.lookupIndex :: k -> Map k a -> Maybe Int)
306findIndex :: forall k a. Ord k => k -> MonoidalMap k a -> Int
307findIndex = coerce (Map.findIndex :: k -> Map k a -> Int)
309elemAt :: forall k a. Int -> MonoidalMap k a -> (k, a)
310elemAt = coerce (Map.elemAt :: Int -> Map k a -> (k, a))
312updateAt :: forall k a. (k -> a -> Maybe a) -> Int -> MonoidalMap k a -> MonoidalMap k a
313updateAt = coerce (Map.updateAt :: (k -> a -> Maybe a) -> Int -> Map k a -> Map k a)
315deleteAt :: forall k a. Int -> MonoidalMap k a -> MonoidalMap k a
316deleteAt = coerce (Map.deleteAt :: Int -> Map k a -> Map k a)
318findMin :: forall k a. MonoidalMap k a -> (k, a)
319findMin = coerce (Map.findMin :: Map k a -> (k, a))
321findMax :: forall k a. MonoidalMap k a -> (k, a)
322findMax = coerce (Map.findMax :: Map k a -> (k, a))
324deleteMin :: forall k a. MonoidalMap k a -> MonoidalMap k a
325deleteMin = coerce (Map.deleteMin :: Map k a -> Map k a)
327deleteMax :: forall k a. MonoidalMap k a -> MonoidalMap k a
328deleteMax = coerce (Map.deleteMax :: Map k a -> Map k a)
330deleteFindMin :: forall k a. MonoidalMap k a -> ((k, a), MonoidalMap k a)
331deleteFindMin = coerce (Map.deleteFindMin :: Map k a -> ((k, a), Map k a))
333deleteFindMax :: forall k a. MonoidalMap k a -> ((k, a), MonoidalMap k a)
334deleteFindMax = coerce (Map.deleteFindMax :: Map k a -> ((k, a), Map k a))
336updateMin :: forall k a. (a -> Maybe a) -> MonoidalMap k a -> MonoidalMap k a
337updateMin = coerce (Map.updateMin :: (a -> Maybe a) -> Map k a -> Map k a)
339updateMax :: forall k a. (a -> Maybe a) -> MonoidalMap k a -> MonoidalMap k a
340updateMax = coerce (Map.updateMax :: (a -> Maybe a) -> Map k a -> Map k a)
342updateMinWithKey :: forall k a. (k -> a -> Maybe a) -> MonoidalMap k a -> MonoidalMap k a
343updateMinWithKey = coerce (Map.updateMinWithKey :: (k -> a -> Maybe a) -> Map k a -> Map k a)
345updateMaxWithKey :: forall k a. (k -> a -> Maybe a) -> MonoidalMap k a -> MonoidalMap k a
346updateMaxWithKey = coerce (Map.updateMaxWithKey :: (k -> a -> Maybe a) -> Map k a -> Map k a)
348minView :: forall k a. MonoidalMap k a -> Maybe (a, MonoidalMap k a)
349minView = coerce (Map.minView :: Map k a -> Maybe (a, Map k a))
351maxView :: forall k a. MonoidalMap k a -> Maybe (a, MonoidalMap k a)
352maxView = coerce (Map.maxView :: Map k a -> Maybe (a, Map k a))
354minViewWithKey :: forall k a. MonoidalMap k a -> Maybe ((k, a), MonoidalMap k a)
355minViewWithKey = coerce (Map.minViewWithKey :: Map k a -> Maybe ((k, a), Map k a))
357maxViewWithKey :: forall k a. MonoidalMap k a -> Maybe ((k, a), MonoidalMap k a)
358maxViewWithKey = coerce (Map.maxViewWithKey :: Map k a -> Maybe ((k, a), Map k a))
360showTree :: forall k a. (Show k, Show a) => MonoidalMap k a -> String
361showTree = coerce (Map.showTree :: Map k a -> String)
363showTreeWith :: forall k a. (k -> a -> String) -> Bool -> Bool -> MonoidalMap k a -> String
364showTreeWith = coerce (Map.showTreeWith :: (k -> a -> String) -> Bool -> Bool -> Map k a -> String)
366valid :: forall k a. Ord k => MonoidalMap k a -> Bool
367valid = coerce (Map.valid :: Map k a -> Bool)
369instance Default (MonoidalMap k a) where
370 def = empty