diff options
| author | Eugen Wissner <belka@caraus.de> | 2021-02-19 08:09:04 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2021-02-19 08:09:04 +0100 |
| commit | 10e4d64052aabbbe3fd82daf83138723ae4af3b6 (patch) | |
| tree | 6acbe15cdeabc8230806808600768980b1380156 /src/Language/GraphQL/Execute/OrderedMap.hs | |
| parent | d74e27e90330400fa97296f09dae0777f340bfe1 (diff) | |
| download | graphql-10e4d64052aabbbe3fd82daf83138723ae4af3b6.tar.gz | |
Replace Map with OrderedMap
Diffstat (limited to 'src/Language/GraphQL/Execute/OrderedMap.hs')
| -rw-r--r-- | src/Language/GraphQL/Execute/OrderedMap.hs | 24 |
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 |
