on develop help sign in
Make Data.AppendMap use monoidal-containers
commite4a4e75ee8cfa52b6ee1ab592d73a077362c65c7 authorRyan Trinkle <ryan.trinkle@gmail.com> dateSat 14 Jul 2018, 00:28 (8 years ago) parent0e76993
4 files changed+133−175
default.nix+3−2 reflex.cabal+6−4 src/Data/AppendMap.hs+121−167 test/QueryT.hs+3−2
default.nix+3−2
@@ -5,7 +5,8 @@
55, semigroupoids , semigroups, split, stdenv, stm, syb
66, template-haskell , these, time, transformers
77, transformers-compat, unbounded-delays, prim-uniq
8−, data-default , filepath, directory, filemanip, ghcjs-base
8+, data-default, filepath, directory, filemanip, ghcjs-base
9+, monoidal-containers
910, useTemplateHaskell ? true
1011}:
1112mkDerivation {
@@ -20,7 +21,7 @@ mkDerivation {
2021 transformers-compat prim-uniq
2122 base bifunctors containers deepseq dependent-map dependent-sum
2223 mtl ref-tf split transformers data-default
23− random time unbounded-delays
24+ random time unbounded-delays monoidal-containers
2425 ] ++ (if ghc.isGhcjs or false then [
2526 ghcjs-base
2627 ] else []) ++ (if !useTemplateHaskell then [] else [
reflex.cabal+6−4
@@ -46,6 +46,7 @@ library
4646 exception-transformers == 0.4.*,
4747 lens >= 4.7 && < 5,
4848 monad-control >= 1.0.1 && < 1.1,
49+ monoidal-containers >= 0.3.0.2 && < 0.4,
4950 mtl >= 2.1 && < 2.3,
5051 prim-uniq >= 0.1.0.1 && < 0.2,
5152 primitive >= 0.5 && < 0.7,
@@ -217,14 +218,15 @@ test-suite QueryT
217218 hs-source-dirs: test
218219 build-depends: base
219220 , containers
220− , dependent-sum
221221 , dependent-map
222+ , dependent-sum
222223 , lens
224+ , monoidal-containers
225+ , ref-tf
226+ , reflex
227+ , semigroups
223228 , these
224229 , transformers
225− , semigroups
226− , reflex
227− , ref-tf
228230 other-modules: Test.Run
229231
230232test-suite GC-Semantics
src/Data/AppendMap.hs+121−167
@@ -1,3 +1,4 @@
1+{-# LANGUAGE CPP #-}
12{-# LANGUAGE DeriveFunctor #-}
23{-# LANGUAGE DeriveGeneric #-}
34{-# LANGUAGE DeriveTraversable #-}
@@ -7,45 +8,41 @@
78{-# LANGUAGE MultiParamTypeClasses #-}
89{-# LANGUAGE RoleAnnotations #-}
910{-# LANGUAGE ScopedTypeVariables #-}
11+{-# LANGUAGE StandaloneDeriving #-}
1012{-# LANGUAGE TypeFamilies #-}
13+{-# OPTIONS_GHC -fno-warn-orphans #-}
1114-- | 'Data.Map' with a better 'Monoid' instance
1215--
1316-- 'Data.Map' has @mappend = union@, which is left-biased. AppendMap has
1417-- @mappend = unionWith mappend@ instead.
15−module Data.AppendMap where
18+module Data.AppendMap
19+ ( module Data.AppendMap
20+ , module Data.Map.Monoidal
21+ ) where
1622
1723import Prelude hiding (map)
1824
19−import Control.Lens
2025import Data.Align
2126import Data.Coerce
2227import Data.Default
2328import Data.Map (Map)
2429import qualified Data.Map as Map
30+import Data.Map.Monoidal
2531import Data.Semigroup
2632import Data.Set (Set)
27−import Data.Typeable
28−import GHC.Generics (Generic)
2933import Reflex.Class (FunctorMaybe (..))
3034import Reflex.Patch (Additive, Group (..))
3135
32−newtype AppendMap k m = AppendMap { _unAppendMap :: Map k m }
33− deriving (Eq, Ord, Show, Read, Typeable, Generic, Functor, Foldable, Traversable, Align)
36+{-# DEPRECATED AppendMap "Use 'MonoidalMap' instead" #-}
37+type AppendMap = MonoidalMap
3438
35−type instance (Index (AppendMap k m)) = k
36−type instance (IxValue (AppendMap k m)) = m
39+deriving instance Ord k => Align (MonoidalMap k)
3740
38−instance Ord k => Ixed (AppendMap k m) where
39− ix i = _Wrapped . ix i
40−
41−instance Ord k => At (AppendMap k m) where
42− at i = _Wrapped . at i
43−
44−instance FunctorMaybe (AppendMap k) where
41+instance FunctorMaybe (MonoidalMap k) where
4542 fmapMaybe = mapMaybe
4643
4744-- | Deletes a key, returning 'Nothing' if the result is empty.
48−nonEmptyDelete :: Ord k => k -> AppendMap k a -> Maybe (AppendMap k a)
45+nonEmptyDelete :: Ord k => k -> MonoidalMap k a -> Maybe (MonoidalMap k a)
4946nonEmptyDelete k vs =
5047 let deleted = delete k vs
5148 in if Data.AppendMap.null deleted
@@ -53,356 +50,313 @@ nonEmptyDelete k vs =
5350 else Just deleted
5451
5552mapMaybeNoNull :: (a -> Maybe b)
56− -> AppendMap token a
57− -> Maybe (AppendMap token b)
53+ -> MonoidalMap token a
54+ -> Maybe (MonoidalMap token b)
5855mapMaybeNoNull f as =
5956 let bs = fmapMaybe f as
6057 in if Data.AppendMap.null bs
6158 then Nothing
6259 else Just bs
6360
64−instance FunctorWithIndex k (AppendMap k) where
65− imap f = AppendMap . imap f . _unAppendMap
66− imapped = _Wrapped . imapped
67−
68−instance FoldableWithIndex k (AppendMap k) where
69− ifolded = _Wrapped . ifolded
70−
71−instance TraversableWithIndex k (AppendMap k) where
72− itraverse = itraverseOf itraversed
73− itraversed = _Wrapped . itraversed
61+#if !MIN_VERSION_monoidal_containers(0,3,1)
62+instance (Ord k, Semigroup v) => Semigroup (MonoidalMap k v) where
63+ MonoidalMap a <> MonoidalMap b = MonoidalMap $ Map.unionWith (<>) a b
64+#endif
7465
75−instance (Ord k, Semigroup m) => Semigroup (AppendMap k m) where
76− (AppendMap m0) <> (AppendMap m1) = AppendMap $ Map.unionWith (<>) m0 m1
77−
78−instance (Ord k, Semigroup m) => Monoid (AppendMap k m) where
79− mempty = empty
80− mappend = (<>)
81−
82−instance (Ord k, Group q) => Group (AppendMap k q) where
66+instance (Ord k, Group q) => Group (MonoidalMap k q) where
8367 negateG = map negateG
8468
85−instance (Ord k, Additive q) => Additive (AppendMap k q)
69+instance (Ord k, Additive q) => Additive (MonoidalMap k q)
8670
87−(!) :: forall k a. Ord k => AppendMap k a -> k -> a
71+(!) :: forall k a. Ord k => MonoidalMap k a -> k -> a
8872(!) = coerce ((Map.!) :: Map k a -> k -> a)
8973infixl 9 !
9074
91−(\\) :: forall k a b. Ord k => AppendMap k a -> AppendMap k b -> AppendMap k a
75+(\\) :: forall k a b. Ord k => MonoidalMap k a -> MonoidalMap k b -> MonoidalMap k a
9276(\\) = coerce ((Map.\\) :: Map k a -> Map k b -> Map k a)
93−infixl 9 \\
77+infixl 9 {-"-} \\ {-"-} --These comments prevent the C preprocssor from complaining
9478
95−null :: forall k a. AppendMap k a -> Bool
79+null :: forall k a. MonoidalMap k a -> Bool
9680null = coerce (Map.null :: Map k a -> Bool)
9781
98−size :: forall k a. AppendMap k a -> Int
99−size = coerce (Map.size :: Map k a -> Int)
100−
101−member :: forall k a. Ord k => k -> AppendMap k a -> Bool
102−member = coerce (Map.member :: k -> Map k a -> Bool)
103−
104−notMember :: forall k a. Ord k => k -> AppendMap k a -> Bool
105−notMember = coerce (Map.notMember :: k -> Map k a -> Bool)
106−
107−lookup :: forall k a. Ord k => k -> AppendMap k a -> Maybe a
82+lookup :: forall k a. Ord k => k -> MonoidalMap k a -> Maybe a
10883lookup = coerce (Map.lookup :: k -> Map k a -> Maybe a)
10984
110−findWithDefault :: forall k a. Ord k => a -> k -> AppendMap k a -> a
111−findWithDefault = coerce (Map.findWithDefault :: a -> k -> Map k a -> a)
112−
113−lookupLT :: forall k a. Ord k => k -> AppendMap k a -> Maybe (k, a)
85+lookupLT :: forall k a. Ord k => k -> MonoidalMap k a -> Maybe (k, a)
11486lookupLT = coerce (Map.lookupLT :: k -> Map k a -> Maybe (k,a))
11587
116−lookupGT :: forall k a. Ord k => k -> AppendMap k a -> Maybe (k, a)
88+lookupGT :: forall k a. Ord k => k -> MonoidalMap k a -> Maybe (k, a)
11789lookupGT = coerce (Map.lookupGT :: k -> Map k a -> Maybe (k,a))
11890
119−lookupLE :: forall k a. Ord k => k -> AppendMap k a -> Maybe (k, a)
91+lookupLE :: forall k a. Ord k => k -> MonoidalMap k a -> Maybe (k, a)
12092lookupLE = coerce (Map.lookupLE :: k -> Map k a -> Maybe (k,a))
12193
122−lookupGE :: forall k a. Ord k => k -> AppendMap k a -> Maybe (k, a)
94+lookupGE :: forall k a. Ord k => k -> MonoidalMap k a -> Maybe (k, a)
12395lookupGE = coerce (Map.lookupGE :: k -> Map k a -> Maybe (k,a))
12496
125−empty :: forall k a. AppendMap k a
97+empty :: forall k a. MonoidalMap k a
12698empty = coerce (Map.empty :: Map k a)
12799
128−singleton :: forall k a. k -> a -> AppendMap k a
129−singleton = coerce (Map.singleton :: k -> a -> Map k a)
130−
131−insert :: forall k a. Ord k => k -> a -> AppendMap k a -> AppendMap k a
100+insert :: forall k a. Ord k => k -> a -> MonoidalMap k a -> MonoidalMap k a
132101insert = coerce (Map.insert :: k -> a -> Map k a -> Map k a)
133102
134−insertWith :: forall k a. Ord k => (a -> a -> a) -> k -> a -> AppendMap k a -> AppendMap k a
103+insertWith :: forall k a. Ord k => (a -> a -> a) -> k -> a -> MonoidalMap k a -> MonoidalMap k a
135104insertWith = coerce (Map.insertWith :: (a -> a -> a) -> k -> a -> Map k a -> Map k a)
136105
137−insertWithKey :: forall k a. Ord k => (k -> a -> a -> a) -> k -> a -> AppendMap k a -> AppendMap k a
106+insertWithKey :: forall k a. Ord k => (k -> a -> a -> a) -> k -> a -> MonoidalMap k a -> MonoidalMap k a
138107insertWithKey = coerce (Map.insertWithKey :: (k -> a -> a -> a) -> k -> a -> Map k a -> Map k a)
139108
140−insertLookupWithKey :: forall k a. Ord k => (k -> a -> a -> a) -> k -> a -> AppendMap k a -> (Maybe a, AppendMap k a)
109+insertLookupWithKey :: forall k a. Ord k => (k -> a -> a -> a) -> k -> a -> MonoidalMap k a -> (Maybe a, MonoidalMap k a)
141110insertLookupWithKey = coerce (Map.insertLookupWithKey :: (k -> a -> a -> a) -> k -> a -> Map k a -> (Maybe a, Map k a))
142111
143−delete :: forall k a. Ord k => k -> AppendMap k a -> AppendMap k a
112+delete :: forall k a. Ord k => k -> MonoidalMap k a -> MonoidalMap k a
144113delete = coerce (Map.delete :: k -> Map k a -> Map k a)
145114
146−adjust :: forall k a. Ord k => (a -> a) -> k -> AppendMap k a -> AppendMap k a
115+adjust :: forall k a. Ord k => (a -> a) -> k -> MonoidalMap k a -> MonoidalMap k a
147116adjust = coerce (Map.adjust :: (a -> a) -> k -> Map k a -> Map k a)
148117
149−adjustWithKey :: forall k a. Ord k => (k -> a -> a) -> k -> AppendMap k a -> AppendMap k a
118+adjustWithKey :: forall k a. Ord k => (k -> a -> a) -> k -> MonoidalMap k a -> MonoidalMap k a
150119adjustWithKey = coerce (Map.adjustWithKey :: (k -> a -> a) -> k -> Map k a -> Map k a)
151120
152−update :: forall k a. Ord k => (a -> Maybe a) -> k -> AppendMap k a -> AppendMap k a
121+update :: forall k a. Ord k => (a -> Maybe a) -> k -> MonoidalMap k a -> MonoidalMap k a
153122update = coerce (Map.update :: (a -> Maybe a) -> k -> Map k a -> Map k a)
154123
155−updateWithKey :: forall k a. Ord k => (k -> a -> Maybe a) -> k -> AppendMap k a -> AppendMap k a
124+updateWithKey :: forall k a. Ord k => (k -> a -> Maybe a) -> k -> MonoidalMap k a -> MonoidalMap k a
156125updateWithKey = coerce (Map.updateWithKey :: (k -> a -> Maybe a) -> k -> Map k a -> Map k a)
157126
158−updateLookupWithKey :: forall k a. Ord k => (k -> a -> Maybe a) -> k -> AppendMap k a -> (Maybe a, AppendMap k a)
127+updateLookupWithKey :: forall k a. Ord k => (k -> a -> Maybe a) -> k -> MonoidalMap k a -> (Maybe a, MonoidalMap k a)
159128updateLookupWithKey = coerce (Map.updateLookupWithKey :: (k -> a -> Maybe a) -> k -> Map k a -> (Maybe a, Map k a))
160129
161−alter :: forall k a. Ord k => (Maybe a -> Maybe a) -> k -> AppendMap k a -> AppendMap k a
130+alter :: forall k a. Ord k => (Maybe a -> Maybe a) -> k -> MonoidalMap k a -> MonoidalMap k a
162131alter = coerce (Map.alter :: (Maybe a -> Maybe a) -> k -> Map k a -> Map k a)
163132
164−unionWith :: forall k a. Ord k => (a -> a -> a) -> AppendMap k a -> AppendMap k a -> AppendMap k a
133+unionWith :: forall k a. Ord k => (a -> a -> a) -> MonoidalMap k a -> MonoidalMap k a -> MonoidalMap k a
165134unionWith = coerce (Map.unionWith :: (a -> a -> a) -> Map k a -> Map k a -> Map k a)
166135
167−unionWithKey :: forall k a. Ord k => (k -> a -> a -> a) -> AppendMap k a -> AppendMap k a -> AppendMap k a
136+unionWithKey :: forall k a. Ord k => (k -> a -> a -> a) -> MonoidalMap k a -> MonoidalMap k a -> MonoidalMap k a
168137unionWithKey = coerce (Map.unionWithKey :: (k -> a -> a -> a) -> Map k a -> Map k a -> Map k a)
169138
170−unionsWith :: forall k a. Ord k => (a -> a -> a) -> [AppendMap k a] -> AppendMap k a
139+unionsWith :: forall k a. Ord k => (a -> a -> a) -> [MonoidalMap k a] -> MonoidalMap k a
171140unionsWith = coerce (Map.unionsWith :: (a -> a -> a) -> [Map k a] -> Map k a)
172141
173−difference :: forall k a b. Ord k => AppendMap k a -> AppendMap k b -> AppendMap k a
142+difference :: forall k a b. Ord k => MonoidalMap k a -> MonoidalMap k b -> MonoidalMap k a
174143difference = (\\)
175144
176−differenceWith :: forall k a b. Ord k => (a -> b -> Maybe a) -> AppendMap k a -> AppendMap k b -> AppendMap k a
145+differenceWith :: forall k a b. Ord k => (a -> b -> Maybe a) -> MonoidalMap k a -> MonoidalMap k b -> MonoidalMap k a
177146differenceWith = coerce (Map.differenceWith :: (a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a)
178147
179−differenceWithKey :: forall k a b. Ord k => (k -> a -> b -> Maybe a) -> AppendMap k a -> AppendMap k b -> AppendMap k a
148+differenceWithKey :: forall k a b. Ord k => (k -> a -> b -> Maybe a) -> MonoidalMap k a -> MonoidalMap k b -> MonoidalMap k a
180149differenceWithKey = coerce (Map.differenceWithKey :: (k -> a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a)
181150
182−intersectionWith :: forall k a b c. Ord k => (a -> b -> c) -> AppendMap k a -> AppendMap k b -> AppendMap k c
151+intersectionWith :: forall k a b c. Ord k => (a -> b -> c) -> MonoidalMap k a -> MonoidalMap k b -> MonoidalMap k c
183152intersectionWith = coerce (Map.intersectionWith :: (a -> b -> c) -> Map k a -> Map k b -> Map k c)
184153
185−intersectionWithKey :: forall k a b c. Ord k => (k -> a -> b -> c) -> AppendMap k a -> AppendMap k b -> AppendMap k c
154+intersectionWithKey :: forall k a b c. Ord k => (k -> a -> b -> c) -> MonoidalMap k a -> MonoidalMap k b -> MonoidalMap k c
186155intersectionWithKey = coerce (Map.intersectionWithKey :: (k -> a -> b -> c) -> Map k a -> Map k b -> Map k c)
187156
188−mergeWithKey :: forall k a b c. Ord k => (k -> a -> b -> Maybe c) -> (AppendMap k a -> AppendMap k c) -> (AppendMap k b -> AppendMap k c) -> AppendMap k a -> AppendMap k b -> AppendMap k c
157+mergeWithKey :: 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
189158mergeWithKey = 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)
190159
191−map :: (a -> b) -> AppendMap k a -> AppendMap k b
160+map :: (a -> b) -> MonoidalMap k a -> MonoidalMap k b
192161map = fmap
193162
194−mapWithKey :: (k -> a -> b) -> AppendMap k a -> AppendMap k b
195−mapWithKey = imap
163+mapWithKey :: (k -> a -> b) -> MonoidalMap k a -> MonoidalMap k b
164+mapWithKey f (MonoidalMap m) = MonoidalMap $ Map.mapWithKey f m
196165
197−traverseWithKey :: Applicative t => (k -> a -> t b) -> AppendMap k a -> t (AppendMap k b)
198−traverseWithKey = itraverse
166+traverseWithKey :: Applicative t => (k -> a -> t b) -> MonoidalMap k a -> t (MonoidalMap k b)
167+traverseWithKey f (MonoidalMap m) = MonoidalMap <$> Map.traverseWithKey f m
199168
200−mapAccum :: forall k a b c. (a -> b -> (a, c)) -> a -> AppendMap k b -> (a, AppendMap k c)
169+mapAccum :: forall k a b c. (a -> b -> (a, c)) -> a -> MonoidalMap k b -> (a, MonoidalMap k c)
201170mapAccum = coerce (Map.mapAccum :: (a -> b -> (a, c)) -> a -> Map k b -> (a, Map k c))
202171
203−mapAccumWithKey :: forall k a b c. (a -> k -> b -> (a, c)) -> a -> AppendMap k b -> (a, AppendMap k c)
172+mapAccumWithKey :: forall k a b c. (a -> k -> b -> (a, c)) -> a -> MonoidalMap k b -> (a, MonoidalMap k c)
204173mapAccumWithKey = coerce (Map.mapAccumWithKey :: (a -> k -> b -> (a, c)) -> a -> Map k b -> (a, Map k c))
205174
206−mapAccumRWithKey :: forall k a b c. (a -> k -> b -> (a, c)) -> a -> AppendMap k b -> (a, AppendMap k c)
175+mapAccumRWithKey :: forall k a b c. (a -> k -> b -> (a, c)) -> a -> MonoidalMap k b -> (a, MonoidalMap k c)
207176mapAccumRWithKey = coerce (Map.mapAccumRWithKey :: (a -> k -> b -> (a, c)) -> a -> Map k b -> (a, Map k c))
208177
209−mapKeys :: forall k1 k2 a. Ord k2 => (k1 -> k2) -> AppendMap k1 a -> AppendMap k2 a
178+mapKeys :: forall k1 k2 a. Ord k2 => (k1 -> k2) -> MonoidalMap k1 a -> MonoidalMap k2 a
210179mapKeys = coerce (Map.mapKeys :: (k1 -> k2) -> Map k1 a -> Map k2 a)
211180
212−mapKeysWith :: forall k1 k2 a. Ord k2 => (a -> a -> a) -> (k1 -> k2) -> AppendMap k1 a -> AppendMap k2 a
181+mapKeysWith :: forall k1 k2 a. Ord k2 => (a -> a -> a) -> (k1 -> k2) -> MonoidalMap k1 a -> MonoidalMap k2 a
213182mapKeysWith = coerce (Map.mapKeysWith :: (a -> a -> a) -> (k1 -> k2) -> Map k1 a -> Map k2 a)
214183
215−mapKeysMonotonic :: forall k1 k2 a. (k1 -> k2) -> AppendMap k1 a -> AppendMap k2 a
184+mapKeysMonotonic :: forall k1 k2 a. (k1 -> k2) -> MonoidalMap k1 a -> MonoidalMap k2 a
216185mapKeysMonotonic = coerce (Map.mapKeysMonotonic :: (k1 -> k2) -> Map k1 a -> Map k2 a)
217186
218−foldr :: forall k a b. (a -> b -> b) -> b -> AppendMap k a -> b
187+foldr :: forall k a b. (a -> b -> b) -> b -> MonoidalMap k a -> b
219188foldr = coerce (Map.foldr :: (a -> b -> b) -> b -> Map k a -> b)
220189
221−foldl :: forall k a b. (a -> b -> a) -> a -> AppendMap k b -> a
190+foldl :: forall k a b. (a -> b -> a) -> a -> MonoidalMap k b -> a
222191foldl = coerce (Map.foldl :: (a -> b -> a) -> a -> Map k b -> a)
223192
224−foldrWithKey :: forall k a b. (k -> a -> b -> b) -> b -> AppendMap k a -> b
193+foldrWithKey :: forall k a b. (k -> a -> b -> b) -> b -> MonoidalMap k a -> b
225194foldrWithKey = coerce (Map.foldrWithKey :: (k -> a -> b -> b) -> b -> Map k a -> b)
226195
227−foldlWithKey :: forall k a b. (a -> k -> b -> a) -> a -> AppendMap k b -> a
196+foldlWithKey :: forall k a b. (a -> k -> b -> a) -> a -> MonoidalMap k b -> a
228197foldlWithKey = coerce (Map.foldlWithKey :: (a -> k -> b -> a) -> a -> Map k b -> a)
229198
230−foldMapWithKey :: forall k a m. Monoid m => (k -> a -> m) -> AppendMap k a -> m
199+foldMapWithKey :: forall k a m. Monoid m => (k -> a -> m) -> MonoidalMap k a -> m
231200foldMapWithKey = coerce (Map.foldMapWithKey :: Monoid m => (k -> a -> m) -> Map k a -> m)
232201
233−foldr' :: forall k a b. (a -> b -> b) -> b -> AppendMap k a -> b
202+foldr' :: forall k a b. (a -> b -> b) -> b -> MonoidalMap k a -> b
234203foldr' = coerce (Map.foldr' :: (a -> b -> b) -> b -> Map k a -> b)
235204
236−foldl' :: forall k a b. (a -> b -> a) -> a -> AppendMap k b -> a
205+foldl' :: forall k a b. (a -> b -> a) -> a -> MonoidalMap k b -> a
237206foldl' = coerce (Map.foldl' :: (a -> b -> a) -> a -> Map k b -> a)
238207
239−foldrWithKey' :: forall k a b. (k -> a -> b -> b) -> b -> AppendMap k a -> b
208+foldrWithKey' :: forall k a b. (k -> a -> b -> b) -> b -> MonoidalMap k a -> b
240209foldrWithKey' = coerce (Map.foldrWithKey' :: (k -> a -> b -> b) -> b -> Map k a -> b)
241210
242−foldlWithKey' :: forall k a b. (a -> k -> b -> a) -> a -> AppendMap k b -> a
211+foldlWithKey' :: forall k a b. (a -> k -> b -> a) -> a -> MonoidalMap k b -> a
243212foldlWithKey' = coerce (Map.foldlWithKey' :: (a -> k -> b -> a) -> a -> Map k b -> a)
244213
245−elems :: forall k a. AppendMap k a -> [a]
246−elems = coerce (Map.elems :: Map k a -> [a])
247−
248−keys :: forall k a. AppendMap k a -> [k]
249−keys = coerce (Map.keys :: Map k a -> [k])
250−
251−assocs :: forall k a. AppendMap k a -> [(k, a)]
252−assocs = coerce (Map.assocs :: Map k a -> [(k, a)])
253−
254−keysSet :: forall k a. AppendMap k a -> Set k
214+keysSet :: forall k a. MonoidalMap k a -> Set k
255215keysSet = coerce (Map.keysSet :: Map k a -> Set k)
256216
257−fromSet :: forall k a. (k -> a) -> Set k -> AppendMap k a
217+fromSet :: forall k a. (k -> a) -> Set k -> MonoidalMap k a
258218fromSet = coerce (Map.fromSet :: (k -> a) -> Set k -> Map k a)
259219
260−toList :: forall k a. AppendMap k a -> [(k, a)]
220+toList :: forall k a. MonoidalMap k a -> [(k, a)]
261221toList = coerce (Map.toList :: Map k a -> [(k, a)])
262222
263−fromList :: forall k a. Ord k => [(k, a)] -> AppendMap k a
223+fromList :: forall k a. Ord k => [(k, a)] -> MonoidalMap k a
264224fromList = coerce (Map.fromList :: [(k, a)] -> Map k a)
265225
266−fromListWith :: forall k a. Ord k => (a -> a -> a) -> [(k, a)] -> AppendMap k a
226+fromListWith :: forall k a. Ord k => (a -> a -> a) -> [(k, a)] -> MonoidalMap k a
267227fromListWith = coerce (Map.fromListWith :: (a -> a -> a) -> [(k, a)] -> Map k a)
268228
269−fromListWithKey :: forall k a. Ord k => (k -> a -> a -> a) -> [(k, a)] -> AppendMap k a
229+fromListWithKey :: forall k a. Ord k => (k -> a -> a -> a) -> [(k, a)] -> MonoidalMap k a
270230fromListWithKey = coerce (Map.fromListWithKey :: (k -> a -> a -> a) -> [(k, a)] -> Map k a)
271231
272−toAscList :: forall k a. AppendMap k a -> [(k, a)]
232+toAscList :: forall k a. MonoidalMap k a -> [(k, a)]
273233toAscList = coerce (Map.toAscList :: Map k a -> [(k, a)])
274234
275−toDescList :: forall k a. AppendMap k a -> [(k, a)]
235+toDescList :: forall k a. MonoidalMap k a -> [(k, a)]
276236toDescList = coerce (Map.toDescList :: Map k a -> [(k, a)])
277237
278−fromAscList :: forall k a. Eq k => [(k, a)] -> AppendMap k a
238+fromAscList :: forall k a. Eq k => [(k, a)] -> MonoidalMap k a
279239fromAscList = coerce (Map.fromAscList :: [(k, a)] -> Map k a)
280240
281−fromAscListWith :: forall k a. Eq k => (a -> a -> a) -> [(k, a)] -> AppendMap k a
241+fromAscListWith :: forall k a. Eq k => (a -> a -> a) -> [(k, a)] -> MonoidalMap k a
282242fromAscListWith = coerce (Map.fromAscListWith :: (a -> a -> a) -> [(k, a)] -> Map k a)
283243
284−fromAscListWithKey :: forall k a. Eq k => (k -> a -> a -> a) -> [(k, a)] -> AppendMap k a
244+fromAscListWithKey :: forall k a. Eq k => (k -> a -> a -> a) -> [(k, a)] -> MonoidalMap k a
285245fromAscListWithKey = coerce (Map.fromAscListWithKey :: (k -> a -> a -> a) -> [(k, a)] -> Map k a)
286246
287−fromDistinctAscList :: forall k a. [(k, a)] -> AppendMap k a
247+fromDistinctAscList :: forall k a. [(k, a)] -> MonoidalMap k a
288248fromDistinctAscList = coerce (Map.fromDistinctAscList :: [(k, a)] -> Map k a)
289249
290−filter :: forall k a. (a -> Bool) -> AppendMap k a -> AppendMap k a
250+filter :: forall k a. (a -> Bool) -> MonoidalMap k a -> MonoidalMap k a
291251filter = coerce (Map.filter :: (a -> Bool) -> Map k a -> Map k a)
292252
293−filterWithKey :: forall k a. (k -> a -> Bool) -> AppendMap k a -> AppendMap k a
253+filterWithKey :: forall k a. (k -> a -> Bool) -> MonoidalMap k a -> MonoidalMap k a
294254filterWithKey = coerce (Map.filterWithKey :: (k -> a -> Bool) -> Map k a -> Map k a)
295255
296−partition :: forall k a. (a -> Bool) -> AppendMap k a -> (AppendMap k a, AppendMap k a)
256+partition :: forall k a. (a -> Bool) -> MonoidalMap k a -> (MonoidalMap k a, MonoidalMap k a)
297257partition = coerce (Map.partition :: (a -> Bool) -> Map k a -> (Map k a, Map k a))
298258
299−partitionWithKey :: forall k a. (k -> a -> Bool) -> AppendMap k a -> (AppendMap k a, AppendMap k a)
259+partitionWithKey :: forall k a. (k -> a -> Bool) -> MonoidalMap k a -> (MonoidalMap k a, MonoidalMap k a)
300260partitionWithKey = coerce (Map.partitionWithKey :: (k -> a -> Bool) -> Map k a -> (Map k a, Map k a))
301261
302−mapMaybe :: forall k a b. (a -> Maybe b) -> AppendMap k a -> AppendMap k b
262+mapMaybe :: forall k a b. (a -> Maybe b) -> MonoidalMap k a -> MonoidalMap k b
303263mapMaybe = coerce (Map.mapMaybe :: (a -> Maybe b) -> Map k a -> Map k b)
304264
305−mapMaybeWithKey :: forall k a b. (k -> a -> Maybe b) -> AppendMap k a -> AppendMap k b
265+mapMaybeWithKey :: forall k a b. (k -> a -> Maybe b) -> MonoidalMap k a -> MonoidalMap k b
306266mapMaybeWithKey = coerce (Map.mapMaybeWithKey :: (k -> a -> Maybe b) -> Map k a -> Map k b)
307267
308−mapEither :: forall k a b c. (a -> Either b c) -> AppendMap k a -> (AppendMap k b, AppendMap k c)
268+mapEither :: forall k a b c. (a -> Either b c) -> MonoidalMap k a -> (MonoidalMap k b, MonoidalMap k c)
309269mapEither = coerce (Map.mapEither :: (a -> Either b c) -> Map k a -> (Map k b, Map k c))
310270
311−mapEitherWithKey :: forall k a b c. (k -> a -> Either b c) -> AppendMap k a -> (AppendMap k b, AppendMap k c)
271+mapEitherWithKey :: forall k a b c. (k -> a -> Either b c) -> MonoidalMap k a -> (MonoidalMap k b, MonoidalMap k c)
312272mapEitherWithKey = coerce (Map.mapEitherWithKey :: (k -> a -> Either b c) -> Map k a -> (Map k b, Map k c))
313273
314−split :: forall k a. Ord k => k -> AppendMap k a -> (AppendMap k a, AppendMap k a)
274+split :: forall k a. Ord k => k -> MonoidalMap k a -> (MonoidalMap k a, MonoidalMap k a)
315275split = coerce (Map.split :: k -> Map k a -> (Map k a, Map k a))
316276
317−splitLookup :: forall k a. Ord k => k -> AppendMap k a -> (AppendMap k a, Maybe a, AppendMap k a)
277+splitLookup :: forall k a. Ord k => k -> MonoidalMap k a -> (MonoidalMap k a, Maybe a, MonoidalMap k a)
318278splitLookup = coerce (Map.splitLookup :: k -> Map k a -> (Map k a, Maybe a, Map k a))
319279
320−splitRoot :: forall k a. AppendMap k a -> [AppendMap k a]
280+splitRoot :: forall k a. MonoidalMap k a -> [MonoidalMap k a]
321281splitRoot = coerce (Map.splitRoot :: Map k a -> [Map k a])
322282
323−isSubmapOf :: forall k a. (Ord k, Eq a) => AppendMap k a -> AppendMap k a -> Bool
283+isSubmapOf :: forall k a. (Ord k, Eq a) => MonoidalMap k a -> MonoidalMap k a -> Bool
324284isSubmapOf = coerce (Map.isSubmapOf :: Map k a -> Map k a -> Bool)
325285
326−isSubmapOfBy :: forall k a b. Ord k => (a -> b -> Bool) -> AppendMap k a -> AppendMap k b -> Bool
286+isSubmapOfBy :: forall k a b. Ord k => (a -> b -> Bool) -> MonoidalMap k a -> MonoidalMap k b -> Bool
327287isSubmapOfBy = coerce (Map.isSubmapOfBy :: (a -> b -> Bool) -> Map k a -> Map k b -> Bool)
328288
329−isProperSubmapOf :: forall k a. (Ord k, Eq a) => AppendMap k a -> AppendMap k a -> Bool
289+isProperSubmapOf :: forall k a. (Ord k, Eq a) => MonoidalMap k a -> MonoidalMap k a -> Bool
330290isProperSubmapOf = coerce (Map.isProperSubmapOf :: Map k a -> Map k a -> Bool)
331291
332−isProperSubmapOfBy :: forall k a b. Ord k => (a -> b -> Bool) -> AppendMap k a -> AppendMap k b -> Bool
292+isProperSubmapOfBy :: forall k a b. Ord k => (a -> b -> Bool) -> MonoidalMap k a -> MonoidalMap k b -> Bool
333293isProperSubmapOfBy = coerce (Map.isProperSubmapOfBy :: (a -> b -> Bool) -> Map k a -> Map k b -> Bool)
334294
335−lookupIndex :: forall k a. Ord k => k -> AppendMap k a -> Maybe Int
295+lookupIndex :: forall k a. Ord k => k -> MonoidalMap k a -> Maybe Int
336296lookupIndex = coerce (Map.lookupIndex :: k -> Map k a -> Maybe Int)
337297
338−findIndex :: forall k a. Ord k => k -> AppendMap k a -> Int
298+findIndex :: forall k a. Ord k => k -> MonoidalMap k a -> Int
339299findIndex = coerce (Map.findIndex :: k -> Map k a -> Int)
340300
341−elemAt :: forall k a. Int -> AppendMap k a -> (k, a)
301+elemAt :: forall k a. Int -> MonoidalMap k a -> (k, a)
342302elemAt = coerce (Map.elemAt :: Int -> Map k a -> (k, a))
343303
344−updateAt :: forall k a. (k -> a -> Maybe a) -> Int -> AppendMap k a -> AppendMap k a
304+updateAt :: forall k a. (k -> a -> Maybe a) -> Int -> MonoidalMap k a -> MonoidalMap k a
345305updateAt = coerce (Map.updateAt :: (k -> a -> Maybe a) -> Int -> Map k a -> Map k a)
346306
347−deleteAt :: forall k a. Int -> AppendMap k a -> AppendMap k a
307+deleteAt :: forall k a. Int -> MonoidalMap k a -> MonoidalMap k a
348308deleteAt = coerce (Map.deleteAt :: Int -> Map k a -> Map k a)
349309
350−findMin :: forall k a. AppendMap k a -> (k, a)
310+findMin :: forall k a. MonoidalMap k a -> (k, a)
351311findMin = coerce (Map.findMin :: Map k a -> (k, a))
352312
353−findMax :: forall k a. AppendMap k a -> (k, a)
313+findMax :: forall k a. MonoidalMap k a -> (k, a)
354314findMax = coerce (Map.findMax :: Map k a -> (k, a))
355315
356−deleteMin :: forall k a. AppendMap k a -> AppendMap k a
316+deleteMin :: forall k a. MonoidalMap k a -> MonoidalMap k a
357317deleteMin = coerce (Map.deleteMin :: Map k a -> Map k a)
358318
359−deleteMax :: forall k a. AppendMap k a -> AppendMap k a
319+deleteMax :: forall k a. MonoidalMap k a -> MonoidalMap k a
360320deleteMax = coerce (Map.deleteMax :: Map k a -> Map k a)
361321
362−deleteFindMin :: forall k a. AppendMap k a -> ((k, a), AppendMap k a)
322+deleteFindMin :: forall k a. MonoidalMap k a -> ((k, a), MonoidalMap k a)
363323deleteFindMin = coerce (Map.deleteFindMin :: Map k a -> ((k, a), Map k a))
364324
365−deleteFindMax :: forall k a. AppendMap k a -> ((k, a), AppendMap k a)
325+deleteFindMax :: forall k a. MonoidalMap k a -> ((k, a), MonoidalMap k a)
366326deleteFindMax = coerce (Map.deleteFindMax :: Map k a -> ((k, a), Map k a))
367327
368−updateMin :: forall k a. (a -> Maybe a) -> AppendMap k a -> AppendMap k a
328+updateMin :: forall k a. (a -> Maybe a) -> MonoidalMap k a -> MonoidalMap k a
369329updateMin = coerce (Map.updateMin :: (a -> Maybe a) -> Map k a -> Map k a)
370330
371−updateMax :: forall k a. (a -> Maybe a) -> AppendMap k a -> AppendMap k a
331+updateMax :: forall k a. (a -> Maybe a) -> MonoidalMap k a -> MonoidalMap k a
372332updateMax = coerce (Map.updateMax :: (a -> Maybe a) -> Map k a -> Map k a)
373333
374−updateMinWithKey :: forall k a. (k -> a -> Maybe a) -> AppendMap k a -> AppendMap k a
334+updateMinWithKey :: forall k a. (k -> a -> Maybe a) -> MonoidalMap k a -> MonoidalMap k a
375335updateMinWithKey = coerce (Map.updateMinWithKey :: (k -> a -> Maybe a) -> Map k a -> Map k a)
376336
377−updateMaxWithKey :: forall k a. (k -> a -> Maybe a) -> AppendMap k a -> AppendMap k a
337+updateMaxWithKey :: forall k a. (k -> a -> Maybe a) -> MonoidalMap k a -> MonoidalMap k a
378338updateMaxWithKey = coerce (Map.updateMaxWithKey :: (k -> a -> Maybe a) -> Map k a -> Map k a)
379339
380−minView :: forall k a. AppendMap k a -> Maybe (a, AppendMap k a)
340+minView :: forall k a. MonoidalMap k a -> Maybe (a, MonoidalMap k a)
381341minView = coerce (Map.minView :: Map k a -> Maybe (a, Map k a))
382342
383−maxView :: forall k a. AppendMap k a -> Maybe (a, AppendMap k a)
343+maxView :: forall k a. MonoidalMap k a -> Maybe (a, MonoidalMap k a)
384344maxView = coerce (Map.maxView :: Map k a -> Maybe (a, Map k a))
385345
386−minViewWithKey :: forall k a. AppendMap k a -> Maybe ((k, a), AppendMap k a)
346+minViewWithKey :: forall k a. MonoidalMap k a -> Maybe ((k, a), MonoidalMap k a)
387347minViewWithKey = coerce (Map.minViewWithKey :: Map k a -> Maybe ((k, a), Map k a))
388348
389−maxViewWithKey :: forall k a. AppendMap k a -> Maybe ((k, a), AppendMap k a)
349+maxViewWithKey :: forall k a. MonoidalMap k a -> Maybe ((k, a), MonoidalMap k a)
390350maxViewWithKey = coerce (Map.maxViewWithKey :: Map k a -> Maybe ((k, a), Map k a))
391351
392−showTree :: forall k a. (Show k, Show a) => AppendMap k a -> String
352+showTree :: forall k a. (Show k, Show a) => MonoidalMap k a -> String
393353showTree = coerce (Map.showTree :: (Show k, Show a) => Map k a -> String)
394354
395−showTreeWith :: forall k a. (k -> a -> String) -> Bool -> Bool -> AppendMap k a -> String
355+showTreeWith :: forall k a. (k -> a -> String) -> Bool -> Bool -> MonoidalMap k a -> String
396356showTreeWith = coerce (Map.showTreeWith :: (k -> a -> String) -> Bool -> Bool -> Map k a -> String)
397357
398−valid :: forall k a. Ord k => AppendMap k a -> Bool
358+valid :: forall k a. Ord k => MonoidalMap k a -> Bool
399359valid = coerce (Map.valid :: Ord k => Map k a -> Bool)
400360
401−instance Default (AppendMap k a) where
361+instance Default (MonoidalMap k a) where
402362 def = empty
403−
404−instance AppendMap k' v' ~ t => Rewrapped (AppendMap k a) t
405−
406−instance Wrapped (AppendMap k a) where
407− type Unwrapped (AppendMap k a) = Map k a
408− _Wrapped' = iso (\(AppendMap m) -> m) AppendMap
test/QueryT.hs+3−2
@@ -8,11 +8,12 @@
88import Control.Lens
99import Control.Monad.Fix
1010import Data.Align
11−import Data.AppendMap (AppendMap)
11+import Data.AppendMap () -- for the Align instance
1212import qualified Data.AppendMap as AMap
1313import Data.Functor.Misc
1414import Data.Map (Map)
1515import qualified Data.Map as Map
16+import Data.Map.Monoidal (MonoidalMap)
1617import Data.Semigroup
1718import Data.These
1819
@@ -31,7 +32,7 @@ instance (Ord k, Query a, Eq (QueryResult a)) => Query (Selector k a) where
3132 type QueryResult (Selector k a) = Selector k (QueryResult a)
3233 crop q r = undefined
3334
34−newtype Selector k a = Selector { unSelector :: AppendMap k a }
35+newtype Selector k a = Selector { unSelector :: MonoidalMap k a }
3536 deriving (Show, Read, Eq, Ord, Functor)
3637
3738instance (Ord k, Eq a, Monoid a) => Semigroup (Selector k a) where