packages feed

hw-aeson 0.1.6.0 → 0.1.7.0

raw patch · 6 files changed

+436/−44 lines, 6 filesdep +bytestringdep +hashablePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: bytestring, hashable

API changes (from Hackage documentation)

- HaskellWorks.Data.Aeson.Compat.Map: data KeyMap v
- HaskellWorks.Data.Aeson.Compat.Map: foldlWithKey' :: (a -> Key -> b -> a) -> a -> KeyMap b -> a
- HaskellWorks.Data.Aeson.Compat.Map: fromHashMapText :: HashMap Text a -> KeyMap a
- HaskellWorks.Data.Aeson.Compat.Map: toHashMapText :: KeyMap a -> HashMap Text a
+ HaskellWorks.Data.Aeson.Compat.Map.V1: alterF :: Functor f => (Maybe v -> f (Maybe v)) -> Key -> KeyMap v -> f (KeyMap v)
+ HaskellWorks.Data.Aeson.Compat.Map.V1: delete :: Key -> KeyMap v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: difference :: KeyMap v -> KeyMap v' -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: elems :: KeyMap v -> [v]
+ HaskellWorks.Data.Aeson.Compat.Map.V1: empty :: KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: filter :: (v -> Bool) -> KeyMap v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: filterWithKey :: (Key -> v -> Bool) -> KeyMap v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: foldMapWithKey :: Monoid m => (Key -> a -> m) -> KeyMap a -> m
+ HaskellWorks.Data.Aeson.Compat.Map.V1: foldl :: (b -> a -> b) -> b -> KeyMap a -> b
+ HaskellWorks.Data.Aeson.Compat.Map.V1: foldl' :: (b -> a -> b) -> b -> KeyMap a -> b
+ HaskellWorks.Data.Aeson.Compat.Map.V1: foldlWithKey :: (a -> Key -> b -> a) -> a -> KeyMap b -> a
+ HaskellWorks.Data.Aeson.Compat.Map.V1: foldlWithKey' :: (a -> Key -> b -> a) -> a -> KeyMap b -> a
+ HaskellWorks.Data.Aeson.Compat.Map.V1: foldr :: (a -> b -> b) -> b -> KeyMap a -> b
+ HaskellWorks.Data.Aeson.Compat.Map.V1: foldr' :: (a -> b -> b) -> b -> KeyMap a -> b
+ HaskellWorks.Data.Aeson.Compat.Map.V1: foldrWithKey :: (Key -> v -> a -> a) -> a -> KeyMap v -> a
+ HaskellWorks.Data.Aeson.Compat.Map.V1: fromHashMap :: HashMap Key v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: fromHashMapText :: HashMap Text v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: fromList :: [(Key, v)] -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: fromListWith :: (v -> v -> v) -> [(Key, v)] -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: fromMap :: Map Key v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: fromMapText :: Map Text v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: insert :: Key -> v -> KeyMap v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: intersection :: KeyMap a -> KeyMap b -> KeyMap a
+ HaskellWorks.Data.Aeson.Compat.Map.V1: intersectionWith :: (a -> b -> c) -> KeyMap a -> KeyMap b -> KeyMap c
+ HaskellWorks.Data.Aeson.Compat.Map.V1: intersectionWithKey :: (Key -> a -> b -> c) -> KeyMap a -> KeyMap b -> KeyMap c
+ HaskellWorks.Data.Aeson.Compat.Map.V1: keys :: KeyMap v -> [Key]
+ HaskellWorks.Data.Aeson.Compat.Map.V1: lookup :: Key -> KeyMap v -> Maybe v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: map :: (a -> b) -> KeyMap a -> KeyMap b
+ HaskellWorks.Data.Aeson.Compat.Map.V1: mapMaybe :: (a -> Maybe b) -> KeyMap a -> KeyMap b
+ HaskellWorks.Data.Aeson.Compat.Map.V1: mapMaybeWithKey :: (Key -> v -> Maybe u) -> KeyMap v -> KeyMap u
+ HaskellWorks.Data.Aeson.Compat.Map.V1: mapWithKey :: (Key -> a -> b) -> KeyMap a -> KeyMap b
+ HaskellWorks.Data.Aeson.Compat.Map.V1: member :: Key -> KeyMap v -> Bool
+ HaskellWorks.Data.Aeson.Compat.Map.V1: null :: KeyMap v -> Bool
+ HaskellWorks.Data.Aeson.Compat.Map.V1: singleton :: Key -> v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: size :: KeyMap v -> Int
+ HaskellWorks.Data.Aeson.Compat.Map.V1: toAscList :: KeyMap v -> [(Key, v)]
+ HaskellWorks.Data.Aeson.Compat.Map.V1: toHashMap :: KeyMap v -> HashMap Key v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: toHashMapText :: KeyMap v -> HashMap Text v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: toList :: KeyMap v -> [(Key, v)]
+ HaskellWorks.Data.Aeson.Compat.Map.V1: toMap :: KeyMap v -> Map Key v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: toMapText :: KeyMap v -> Map Text v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: traverseWithKey :: Applicative f => (Key -> v1 -> f v2) -> KeyMap v1 -> f (KeyMap v2)
+ HaskellWorks.Data.Aeson.Compat.Map.V1: type Key = Text
+ HaskellWorks.Data.Aeson.Compat.Map.V1: type KeyMap v = HashMap Text v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: union :: KeyMap v -> KeyMap v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: unionWith :: (v -> v -> v) -> KeyMap v -> KeyMap v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V1: unionWithKey :: (Key -> v -> v -> v) -> KeyMap v -> KeyMap v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: alterF :: Functor f => (Maybe v -> f (Maybe v)) -> Key -> KeyMap v -> f (KeyMap v)
+ HaskellWorks.Data.Aeson.Compat.Map.V2: delete :: Key -> KeyMap v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: difference :: KeyMap v -> KeyMap v' -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: elems :: KeyMap v -> [v]
+ HaskellWorks.Data.Aeson.Compat.Map.V2: empty :: KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: filter :: (v -> Bool) -> KeyMap v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: filterWithKey :: (Key -> v -> Bool) -> KeyMap v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: foldMapWithKey :: Monoid m => (Key -> a -> m) -> KeyMap a -> m
+ HaskellWorks.Data.Aeson.Compat.Map.V2: foldl :: (b -> a -> b) -> b -> KeyMap a -> b
+ HaskellWorks.Data.Aeson.Compat.Map.V2: foldl' :: (b -> a -> b) -> b -> KeyMap a -> b
+ HaskellWorks.Data.Aeson.Compat.Map.V2: foldlWithKey :: (a -> Key -> b -> a) -> a -> KeyMap b -> a
+ HaskellWorks.Data.Aeson.Compat.Map.V2: foldlWithKey' :: (a -> Key -> b -> a) -> a -> KeyMap b -> a
+ HaskellWorks.Data.Aeson.Compat.Map.V2: foldr :: (a -> b -> b) -> b -> KeyMap a -> b
+ HaskellWorks.Data.Aeson.Compat.Map.V2: foldr' :: (a -> b -> b) -> b -> KeyMap a -> b
+ HaskellWorks.Data.Aeson.Compat.Map.V2: foldrWithKey :: (Key -> v -> a -> a) -> a -> KeyMap v -> a
+ HaskellWorks.Data.Aeson.Compat.Map.V2: fromHashMap :: HashMap Key v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: fromHashMapText :: HashMap Text v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: fromList :: [(Key, v)] -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: fromListWith :: (v -> v -> v) -> [(Key, v)] -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: fromMap :: Map Key v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: fromMapText :: Map Text v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: insert :: Key -> v -> KeyMap v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: intersection :: KeyMap a -> KeyMap b -> KeyMap a
+ HaskellWorks.Data.Aeson.Compat.Map.V2: intersectionWith :: (a -> b -> c) -> KeyMap a -> KeyMap b -> KeyMap c
+ HaskellWorks.Data.Aeson.Compat.Map.V2: intersectionWithKey :: (Key -> a -> b -> c) -> KeyMap a -> KeyMap b -> KeyMap c
+ HaskellWorks.Data.Aeson.Compat.Map.V2: keys :: KeyMap v -> [Key]
+ HaskellWorks.Data.Aeson.Compat.Map.V2: lookup :: Key -> KeyMap v -> Maybe v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: map :: (a -> b) -> KeyMap a -> KeyMap b
+ HaskellWorks.Data.Aeson.Compat.Map.V2: mapMaybe :: (a -> Maybe b) -> KeyMap a -> KeyMap b
+ HaskellWorks.Data.Aeson.Compat.Map.V2: mapMaybeWithKey :: (Key -> v -> Maybe u) -> KeyMap v -> KeyMap u
+ HaskellWorks.Data.Aeson.Compat.Map.V2: mapWithKey :: (Key -> a -> b) -> KeyMap a -> KeyMap b
+ HaskellWorks.Data.Aeson.Compat.Map.V2: member :: Key -> KeyMap v -> Bool
+ HaskellWorks.Data.Aeson.Compat.Map.V2: null :: KeyMap v -> Bool
+ HaskellWorks.Data.Aeson.Compat.Map.V2: singleton :: Key -> v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: size :: KeyMap v -> Int
+ HaskellWorks.Data.Aeson.Compat.Map.V2: toAscList :: KeyMap v -> [(Key, v)]
+ HaskellWorks.Data.Aeson.Compat.Map.V2: toHashMap :: KeyMap v -> HashMap Key v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: toHashMapText :: KeyMap v -> HashMap Text v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: toList :: KeyMap v -> [(Key, v)]
+ HaskellWorks.Data.Aeson.Compat.Map.V2: toMap :: KeyMap v -> Map Key v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: toMapText :: KeyMap v -> Map Text v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: traverseWithKey :: Applicative f => (Key -> v1 -> f v2) -> KeyMap v1 -> f (KeyMap v2)
+ HaskellWorks.Data.Aeson.Compat.Map.V2: type Key = Key
+ HaskellWorks.Data.Aeson.Compat.Map.V2: type KeyMap v = KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: union :: KeyMap v -> KeyMap v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: unionWith :: (v -> v -> v) -> KeyMap v -> KeyMap v -> KeyMap v
+ HaskellWorks.Data.Aeson.Compat.Map.V2: unionWithKey :: (Key -> v -> v -> v) -> KeyMap v -> KeyMap v -> KeyMap v

Files

hw-aeson.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.2  name:                   hw-aeson-version:                0.1.6.0+version:                0.1.7.0 synopsis:               Convenience functions for Aeson description:            Convenience functions for Aeson. category:               Data, JSON@@ -23,9 +23,11 @@ common base                       { build-depends: base                       >= 4.11       && < 5      }  common aeson                      { build-depends: aeson                      >= 1.4        && < 2.1    }-common containers                 { build-depends: containers                 >= 0.6        && < 0.7   }+common bytestring                 { build-depends: bytestring                 >= 0.10       && < 0.12   }+common containers                 { build-depends: containers                 >= 0.6        && < 0.7    } common doctest                    { build-depends: doctest                    >= 0.16.2     && < 0.21   } common doctest-discover           { build-depends: doctest-discover           >= 0.2        && < 0.3    }+common hashable                   { build-depends: hashable                   >= 1.3        && < 1.5    } common hedgehog                   { build-depends: hedgehog                   >= 0.6        && < 1.3    } common hspec                      { build-depends: hspec                      >= 2.4        && < 3      } common text                       { build-depends: text                       >= 1.2        && < 1.3    }@@ -40,7 +42,9 @@ library   import:               base, config                       , aeson+                      , bytestring                       , containers+                      , hashable                       , text                       , text-short                       , unordered-containers@@ -51,6 +55,8 @@   exposed-modules:      HaskellWorks.Data.Aeson                         HaskellWorks.Data.Aeson.Compat                         HaskellWorks.Data.Aeson.Compat.Map+                        HaskellWorks.Data.Aeson.Compat.Map.V1+                        HaskellWorks.Data.Aeson.Compat.Map.V2  test-suite hw-aeson-test   import:               base, config
src/HaskellWorks/Data/Aeson.hs view
@@ -13,11 +13,15 @@  import Data.Aeson (pairs, object, KeyValue((.=)), ToJSON(toJSON, toEncoding), Series, Value(Null)) import Data.Aeson.Encoding (Encoding)-import Data.Aeson.Types (Pair, Parser)+import Data.Aeson.Types (Pair, Parser, parseEither) import Data.Monoid (Endo(..)) import HaskellWorks.Data.Aeson.Compat (Key) import Text.Read (readMaybe) +import qualified Data.Aeson           as J+import qualified Data.Aeson.Types     as J+import qualified Data.ByteString.Lazy as LBS+ infixr 7 .?= infixr 7 .!= @@ -96,3 +100,6 @@ instance ToJsonKeyValues a => ToJSON (WithJsonKeyValues a) where   toJSON = objectEndo . toJsonKeyValues . unWithJsonKeyValues   toEncoding = pairs . mconcat . toJsonKeyValues . unWithJsonKeyValues++eitherDecodeWith :: (Value -> Parser a) -> LBS.ByteString -> Either String a+eitherDecodeWith f lbs = J.eitherDecode lbs >>= J.parseEither f
src/HaskellWorks/Data/Aeson/Compat/Map.hs view
@@ -2,49 +2,10 @@  module HaskellWorks.Data.Aeson.Compat.Map   ( module JM-  , KeyMap(..)-  , foldlWithKey'-  , fromHashMapText-  , toHashMapText   ) where -import qualified Data.Map as M-import qualified HaskellWorks.Data.Aeson.Compat as J--import Data.HashMap.Strict (HashMap)-import Data.Text (Text)- #if MIN_VERSION_aeson(2,0,0)-import qualified Data.Aeson.KeyMap as JM-import Data.Aeson.KeyMap (KeyMap)-#else-import qualified Data.HashMap.Strict as JM-import Data.HashMap.Strict hiding (foldlWithKey')-#endif--#if !MIN_VERSION_aeson(2,0,0)-type KeyMap v = JM.HashMap Text v-#endif--foldlWithKey' :: (a -> J.Key -> b -> a) -> a -> KeyMap b -> a-#if MIN_VERSION_aeson(2,0,0)-foldlWithKey' f a = M.foldlWithKey' f a . JM.toMap-#else-foldlWithKey'= JM.foldlWithKey'-#endif--#if MIN_VERSION_aeson(2,0,0)-fromHashMapText :: HashMap Text a ->  KeyMap a-fromHashMapText = JM.fromHashMapText-#else-fromHashMapText :: HashMap Text a -> HashMap Text a-fromHashMapText = id-#endif--#if MIN_VERSION_aeson(2,0,0)-toHashMapText :: KeyMap a -> HashMap Text a-toHashMapText = JM.toHashMapText+import HaskellWorks.Data.Aeson.Compat.Map.V2 as JM #else-toHashMapText :: HashMap Text a -> HashMap Text a-toHashMapText = id+import HaskellWorks.Data.Aeson.Compat.Map.V1 as JM #endif
+ src/HaskellWorks/Data/Aeson/Compat/Map/V1.hs view
@@ -0,0 +1,198 @@+module HaskellWorks.Data.Aeson.Compat.Map.V1+  ( KeyMap+  , Key+  , foldlWithKey+  , foldlWithKey'+  , null+  , lookup+  , size+  , member+  , empty+  , singleton+  , insert+  , delete+  , alterF+  , difference+  , union+  , unionWith+  , unionWithKey+  , intersection+  , intersectionWith+  , intersectionWithKey+  , fromList+  , fromListWith+  , toList+  , toAscList+  , elems+  , fromHashMap+  , toHashMap+  , fromHashMapText+  , toHashMapText+  , fromMap+  , toMap+  , fromMapText+  , toMapText+  , map+  , mapWithKey+  , traverseWithKey+  , foldr+  , foldr'+  , foldl+  , foldl'+  , foldMapWithKey+  , foldrWithKey+  , keys+  , filter+  , filterWithKey+  , mapMaybe+  , mapMaybeWithKey+  ) where++import qualified Data.HashMap.Strict as HM+import qualified Data.HashMap.Strict as HMS+import qualified Data.Map as M+import qualified HaskellWorks.Data.Aeson.Compat as J++import Data.Hashable (Hashable)+import Data.HashMap.Strict (HashMap)+import Data.Map (Map)+import Data.Text (Text)+import Prelude hiding (filter, foldl, foldr, lookup, map, null)++type KeyMap v = HM.HashMap Text v+type Key = Text++foldlWithKey :: (a -> Key -> b -> a) -> a -> KeyMap b -> a+foldlWithKey = HM.foldlWithKey++foldlWithKey' :: (a -> Key -> b -> a) -> a -> KeyMap b -> a+foldlWithKey' = HM.foldlWithKey'++null :: KeyMap v -> Bool+null = HM.null++lookup :: Key -> KeyMap v -> Maybe v+lookup = HM.lookup++size :: KeyMap v -> Int+size = HM.size++member :: Key -> KeyMap v -> Bool+member = HM.member++empty :: KeyMap v+empty = HM.empty++singleton :: Key -> v -> KeyMap v+singleton = HM.singleton++insert :: Key -> v -> KeyMap v -> KeyMap v+insert = HM.insert++delete :: Key -> KeyMap v -> KeyMap v+delete = HM.delete++alterF :: Functor f => (Maybe v -> f (Maybe v)) -> Key -> KeyMap v -> f (KeyMap v)+alterF = HM.alterF++difference :: KeyMap v -> KeyMap v' -> KeyMap v+difference = HM.difference++union :: KeyMap v -> KeyMap v -> KeyMap v+union = HM.union++unionWith :: (v -> v -> v) -> KeyMap v -> KeyMap v -> KeyMap v+unionWith = HM.unionWith++unionWithKey :: (Key -> v -> v -> v) -> KeyMap v -> KeyMap v -> KeyMap v+unionWithKey = HM.unionWithKey++intersection :: KeyMap a -> KeyMap b -> KeyMap a+intersection = HM.intersection++intersectionWith :: (a -> b -> c) -> KeyMap a -> KeyMap b -> KeyMap c+intersectionWith = HM.intersectionWith++intersectionWithKey :: (Key -> a -> b -> c) -> KeyMap a -> KeyMap b -> KeyMap c+intersectionWithKey = HM.intersectionWithKey++fromList :: [(Key, v)] -> KeyMap v+fromList = HM.fromList++fromListWith :: (v -> v -> v) -> [(Key, v)] -> KeyMap v+fromListWith = HM.fromListWith++toList :: KeyMap v -> [(Key, v)]+toList = HM.toList++toAscList :: KeyMap v -> [(Key, v)]+toAscList = M.toList . toMap++elems :: KeyMap v -> [v]+elems = HM.elems++fromHashMap :: HashMap Key v -> KeyMap v+fromHashMap = id++toHashMap :: KeyMap v -> HashMap Key v+toHashMap = id++fromHashMapText :: HashMap Text v -> KeyMap v+fromHashMapText = id++toHashMapText :: KeyMap v -> HashMap Text v+toHashMapText = id++fromMap :: Map Key v -> KeyMap v+fromMap = HM.fromList . M.toList++toMap :: KeyMap v -> Map Key v+toMap = M.fromList . HM.toList++fromMapText :: Map Text v -> KeyMap v+fromMapText = fromMap++toMapText :: KeyMap v -> Map Text v+toMapText = toMap++map :: (a -> b) -> KeyMap a -> KeyMap b+map = HM.map++mapWithKey :: (Key -> a -> b) -> KeyMap a -> KeyMap b+mapWithKey = HM.mapWithKey++traverseWithKey :: Applicative f => (Key -> v1 -> f v2) -> KeyMap v1 -> f (KeyMap v2)+traverseWithKey = HM.traverseWithKey++foldr :: (a -> b -> b) -> b -> KeyMap a -> b+foldr = HM.foldr++foldr' :: (a -> b -> b) -> b -> KeyMap a -> b+foldr' = HM.foldr'++foldl :: (b -> a -> b) -> b -> KeyMap a -> b+foldl = HM.foldl++foldl' :: (b -> a -> b) -> b -> KeyMap a -> b+foldl' = HM.foldl'++foldMapWithKey :: Monoid m => (Key -> a -> m) -> KeyMap a -> m+foldMapWithKey = HM.foldMapWithKey++foldrWithKey :: (Key -> v -> a -> a) -> a -> KeyMap v -> a+foldrWithKey = HM.foldrWithKey++keys :: KeyMap v -> [Key]+keys = HM.keys++filter :: (v -> Bool) -> KeyMap v -> KeyMap v+filter = HM.filter++filterWithKey :: (Key -> v -> Bool) -> KeyMap v -> KeyMap v+filterWithKey = HM.filterWithKey++mapMaybe :: (a -> Maybe b) -> KeyMap a -> KeyMap b+mapMaybe = HM.mapMaybe++mapMaybeWithKey :: (Key -> v -> Maybe u) -> KeyMap v -> KeyMap u+mapMaybeWithKey = HM.mapMaybeWithKey
+ src/HaskellWorks/Data/Aeson/Compat/Map/V2.hs view
@@ -0,0 +1,206 @@+{-# LANGUAGE CPP #-}++module HaskellWorks.Data.Aeson.Compat.Map.V2+  (+#if MIN_VERSION_aeson(2,0,0)+    KeyMap+  , Key+  , foldlWithKey+  , foldlWithKey'+  , null+  , lookup+  , size+  , member+  , empty+  , singleton+  , insert+  , delete+  , alterF+  , difference+  , union+  , unionWith+  , unionWithKey+  , intersection+  , intersectionWith+  , intersectionWithKey+  , fromList+  , fromListWith+  , toList+  , toAscList+  , elems+  , fromHashMap+  , toHashMap+  , fromHashMapText+  , toHashMapText+  , fromMap+  , toMap+  , fromMapText+  , toMapText+  , map+  , mapWithKey+  , traverseWithKey+  , foldr+  , foldr'+  , foldl+  , foldl'+  , foldMapWithKey+  , foldrWithKey+  , keys+  , filter+  , filterWithKey+  , mapMaybe+  , mapMaybeWithKey+#endif+  ) where++#if MIN_VERSION_aeson(2,0,0)++import qualified Data.Aeson.Key as K+import qualified Data.Aeson.KeyMap as KM+import qualified Data.Map as M+import qualified HaskellWorks.Data.Aeson.Compat as J++import Data.HashMap.Strict (HashMap)+import Data.Map (Map)+import Data.Text (Text)+import Prelude hiding (filter, foldl, foldr, lookup, map, null)++type KeyMap v = KM.KeyMap v+type Key = J.Key++foldlWithKey :: (a -> Key -> b -> a) -> a -> KeyMap b -> a+foldlWithKey f a = M.foldlWithKey f a . KM.toMap++foldlWithKey' :: (a -> Key -> b -> a) -> a -> KeyMap b -> a+foldlWithKey' f a = M.foldlWithKey' f a . KM.toMap++null :: KeyMap v -> Bool+null = KM.null++lookup :: Key -> KeyMap v -> Maybe v+lookup = KM.lookup++size :: KeyMap v -> Int+size = KM.size++member :: Key -> KeyMap v -> Bool+member = KM.member++empty :: KeyMap v+empty = KM.empty++singleton :: Key -> v -> KeyMap v+singleton = KM.singleton++insert :: Key -> v -> KeyMap v -> KeyMap v+insert = KM.insert++delete :: Key -> KeyMap v -> KeyMap v+delete = KM.delete++alterF :: Functor f => (Maybe v -> f (Maybe v)) -> Key -> KeyMap v -> f (KeyMap v)+alterF = KM.alterF++difference :: KeyMap v -> KeyMap v' -> KeyMap v+difference = KM.difference++union :: KeyMap v -> KeyMap v -> KeyMap v+union = KM.union++unionWith :: (v -> v -> v) -> KeyMap v -> KeyMap v -> KeyMap v+unionWith = KM.unionWith++unionWithKey :: (Key -> v -> v -> v) -> KeyMap v -> KeyMap v -> KeyMap v+unionWithKey = KM.unionWithKey++intersection :: KeyMap a -> KeyMap b -> KeyMap a+intersection = KM.intersection++intersectionWith :: (a -> b -> c) -> KeyMap a -> KeyMap b -> KeyMap c+intersectionWith = KM.intersectionWith++intersectionWithKey :: (Key -> a -> b -> c) -> KeyMap a -> KeyMap b -> KeyMap c+intersectionWithKey = KM.intersectionWithKey++fromList :: [(Key, v)] -> KeyMap v+fromList = KM.fromList++fromListWith :: (v -> v -> v) -> [(Key, v)] -> KeyMap v+fromListWith = KM.fromListWith++toList :: KeyMap v -> [(Key, v)]+toList = KM.toList++toAscList :: KeyMap v -> [(Key, v)]+toAscList = M.toList . toMap++elems :: KeyMap v -> [v]+elems = KM.elems++fromHashMap :: HashMap Key v -> KeyMap v+fromHashMap = KM.fromHashMap++toHashMap :: KeyMap v -> HashMap Key v+toHashMap = KM.toHashMap++fromHashMapText :: HashMap Text v -> KeyMap v+fromHashMapText = KM.fromHashMapText++toHashMapText :: KeyMap v -> HashMap Text v+toHashMapText = KM.toHashMapText++fromMap :: Map Key v -> KeyMap v+fromMap = KM.fromList . M.toList++toMap :: KeyMap v -> Map Key v+toMap = M.fromList . KM.toList++fromMapText :: Map Text v -> KeyMap v+fromMapText = KM.fromMap . M.mapKeys K.fromText++toMapText :: KeyMap v -> Map Text v+toMapText = M.mapKeys K.toText . KM.toMap++map :: (a -> b) -> KeyMap a -> KeyMap b+map = KM.map++mapWithKey :: (Key -> a -> b) -> KeyMap a -> KeyMap b+mapWithKey f = KM.fromMap . M.mapWithKey f . KM.toMap++traverseWithKey :: Applicative f => (Key -> v1 -> f v2) -> KeyMap v1 -> f (KeyMap v2)+traverseWithKey = KM.traverseWithKey++foldr :: (a -> b -> b) -> b -> KeyMap a -> b+foldr = KM.foldr++foldr' :: (a -> b -> b) -> b -> KeyMap a -> b+foldr' = KM.foldr'++foldl :: (b -> a -> b) -> b -> KeyMap a -> b+foldl = KM.foldl++foldl' :: (b -> a -> b) -> b -> KeyMap a -> b+foldl' = KM.foldl'++foldMapWithKey :: Monoid m => (Key -> a -> m) -> KeyMap a -> m+foldMapWithKey = KM.foldMapWithKey++foldrWithKey :: (Key -> v -> a -> a) -> a -> KeyMap v -> a+foldrWithKey = KM.foldrWithKey++keys :: KeyMap v -> [Key]+keys = KM.keys++filter :: (v -> Bool) -> KeyMap v -> KeyMap v+filter = KM.filter++filterWithKey :: (Key -> v -> Bool) -> KeyMap v -> KeyMap v+filterWithKey = KM.filterWithKey++mapMaybe :: (a -> Maybe b) -> KeyMap a -> KeyMap b+mapMaybe = KM.mapMaybe++mapMaybeWithKey :: (Key -> v -> Maybe u) -> KeyMap v -> KeyMap u+mapMaybeWithKey = KM.mapMaybeWithKey++#endif
test/HaskellWorks/Data/AesonSpec.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TypeApplications #-}  module HaskellWorks.Data.AesonSpec   ( spec@@ -8,6 +9,8 @@ import HaskellWorks.Data.Aeson import Test.Hspec +import qualified HaskellWorks.Data.Aeson.Compat.Map as JM+ {- HLINT ignore "Redundant do"        -}  spec :: Spec@@ -23,3 +26,14 @@           , "two"    .= (2 :: Int)           ]     actual `shouldBe` expected+  it "Re-exports complete" $ do+    let _ = JM.toList+    let _ = JM.toMap+    let _ = JM.foldlWithKey+    let _ = JM.fromHashMapText+    let _ = JM.lookup @Int+    let _ = JM.toHashMapText+    let _ = JM.toList+    let _ = JM.toMap++    True