summaryrefslogtreecommitdiff
path: root/src/Language/GraphQL/Execute/OrderedMap.hs
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2021-02-19 08:09:04 +0100
committerEugen Wissner <belka@caraus.de>2021-02-19 08:09:04 +0100
commit10e4d64052aabbbe3fd82daf83138723ae4af3b6 (patch)
tree6acbe15cdeabc8230806808600768980b1380156 /src/Language/GraphQL/Execute/OrderedMap.hs
parentd74e27e90330400fa97296f09dae0777f340bfe1 (diff)
downloadgraphql-10e4d64052aabbbe3fd82daf83138723ae4af3b6.tar.gz
Replace Map with OrderedMap
Diffstat (limited to 'src/Language/GraphQL/Execute/OrderedMap.hs')
-rw-r--r--src/Language/GraphQL/Execute/OrderedMap.hs24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/Language/GraphQL/Execute/OrderedMap.hs b/src/Language/GraphQL/Execute/OrderedMap.hs
index f8759c9..e905cce 100644
--- a/src/Language/GraphQL/Execute/OrderedMap.hs
+++ b/src/Language/GraphQL/Execute/OrderedMap.hs
@@ -15,8 +15,10 @@ module Language.GraphQL.Execute.OrderedMap
, foldlWithKey'
, keys
, lookup
+ , replace
, singleton
, size
+ , toList
, traverseMaybe
) where
@@ -49,8 +51,8 @@ instance Semigroup v => Semigroup (OrderedMap v) where
(<>) = foldlWithKey'
$ \accumulator key value -> insert key value accumulator
-instance Monoid v => Monoid (OrderedMap v) where
- mempty = OrderedMap mempty mempty
+instance Semigroup v => Monoid (OrderedMap v) where
+ mempty = empty
instance Traversable OrderedMap where
traverse f (OrderedMap vector hashMap) = OrderedMap vector
@@ -68,8 +70,8 @@ singleton key value = OrderedMap (Vector.singleton key)
$ HashMap.singleton key value
-- | Constructs an empty map.
-empty :: Monoid v => OrderedMap v
-empty = mempty
+empty :: forall v. OrderedMap v
+empty = OrderedMap mempty mempty
-- * Traversal
@@ -90,7 +92,7 @@ foldlWithKey' f initial (OrderedMap vector hashMap) =
-- | Traverse over the elements and collect the 'Just' results.
traverseMaybe
- :: (Applicative f, Monoid b)
+ :: Applicative f
=> forall a
. (a -> f (Maybe b))
-> OrderedMap a
@@ -98,7 +100,7 @@ traverseMaybe
traverseMaybe f orderedMap = foldlWithKey' filter empty
<$> traverse f orderedMap
where
- filter accumulator key (Just value) = insert key value accumulator
+ filter accumulator key (Just value) = replace key value accumulator
filter accumulator _ Nothing = accumulator
-- * Lists
@@ -127,6 +129,16 @@ insert key value (OrderedMap vector hashMap)
| otherwise = OrderedMap (Vector.snoc vector key)
$ HashMap.insert key value hashMap
+-- | Associates the specified value with the specified key in this map. If this
+-- map previously contained a mapping for the key, the existing value is
+-- replaced by the new one.
+replace :: Text -> v -> OrderedMap v -> OrderedMap v
+replace key value (OrderedMap vector hashMap)
+ | HashMap.member key hashMap = OrderedMap vector
+ $ HashMap.insert key value hashMap
+ | otherwise = OrderedMap (Vector.snoc vector key)
+ $ HashMap.insert key value hashMap
+
-- | Gives the size of this map, i.e. number of elements in it.
size :: forall v. OrderedMap v -> Int
size (OrderedMap vector _) = Vector.length vector