insert-ordered-containers 0.1.0.1 → 0.2.0.0
raw patch · 4 files changed
+37/−77 lines, 4 filesdep ~QuickCheckdep ~aesondep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: QuickCheck, aeson, base, base-compat, hashable, lens, semigroupoids, semigroups, text, transformers, unordered-containers
API changes (from Hackage documentation)
- Data.HashMap.Strict.InsOrd: class FromJSONKey a where parseJSONKeyList t = (: []) <$> parseJSONKey t
- Data.HashMap.Strict.InsOrd: class ToJSONKey a where toJSONKeyList [] = empty toJSONKeyList (x : _) = toJSONKey x
- Data.HashMap.Strict.InsOrd: instance (Data.HashMap.Strict.InsOrd.ToJSONKey k, Data.Aeson.Types.Class.ToJSON v) => Data.Aeson.Types.Class.ToJSON (Data.HashMap.Strict.InsOrd.InsOrdHashMap k v)
- Data.HashMap.Strict.InsOrd: instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k, Data.HashMap.Strict.InsOrd.FromJSONKey k, Data.Aeson.Types.Class.FromJSON v) => Data.Aeson.Types.Class.FromJSON (Data.HashMap.Strict.InsOrd.InsOrdHashMap k v)
- Data.HashMap.Strict.InsOrd: instance Data.HashMap.Strict.InsOrd.FromJSONKey Data.Text.Internal.Text
- Data.HashMap.Strict.InsOrd: instance Data.HashMap.Strict.InsOrd.FromJSONKey GHC.Types.Char
- Data.HashMap.Strict.InsOrd: instance Data.HashMap.Strict.InsOrd.FromJSONKey GHC.Types.Int
- Data.HashMap.Strict.InsOrd: instance Data.HashMap.Strict.InsOrd.FromJSONKey a => Data.HashMap.Strict.InsOrd.FromJSONKey [a]
- Data.HashMap.Strict.InsOrd: instance Data.HashMap.Strict.InsOrd.ToJSONKey Data.Text.Internal.Text
- Data.HashMap.Strict.InsOrd: instance Data.HashMap.Strict.InsOrd.ToJSONKey GHC.Types.Char
- Data.HashMap.Strict.InsOrd: instance Data.HashMap.Strict.InsOrd.ToJSONKey GHC.Types.Int
- Data.HashMap.Strict.InsOrd: instance Data.HashMap.Strict.InsOrd.ToJSONKey a => Data.HashMap.Strict.InsOrd.ToJSONKey [a]
- Data.HashMap.Strict.InsOrd: parseJSONKey :: FromJSONKey a => Text -> Parser a
- Data.HashMap.Strict.InsOrd: parseJSONKeyList :: FromJSONKey a => Text -> Parser [a]
- Data.HashMap.Strict.InsOrd: toJSONKey :: ToJSONKey a => a -> Text
- Data.HashMap.Strict.InsOrd: toJSONKeyList :: ToJSONKey a => [a] -> Text
+ Data.HashMap.Strict.InsOrd: instance (Data.Aeson.Types.ToJSON.ToJSONKey k, Data.Aeson.Types.ToJSON.ToJSON v) => Data.Aeson.Types.ToJSON.ToJSON (Data.HashMap.Strict.InsOrd.InsOrdHashMap k v)
+ Data.HashMap.Strict.InsOrd: instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k, Data.Aeson.Types.FromJSON.FromJSONKey k) => Data.Aeson.Types.FromJSON.FromJSON1 (Data.HashMap.Strict.InsOrd.InsOrdHashMap k)
+ Data.HashMap.Strict.InsOrd: instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k, Data.Aeson.Types.FromJSON.FromJSONKey k, Data.Aeson.Types.FromJSON.FromJSON v) => Data.Aeson.Types.FromJSON.FromJSON (Data.HashMap.Strict.InsOrd.InsOrdHashMap k v)
+ Data.HashMap.Strict.InsOrd: instance Data.Aeson.Types.ToJSON.ToJSONKey k => Data.Aeson.Types.ToJSON.ToJSON1 (Data.HashMap.Strict.InsOrd.InsOrdHashMap k)
- Data.HashMap.Strict.InsOrd: fromList :: (Eq k, Hashable k) => [(k, v)] -> InsOrdHashMap k v
+ Data.HashMap.Strict.InsOrd: fromList :: forall k v. (Eq k, Hashable k) => [(k, v)] -> InsOrdHashMap k v
Files
- CHANGELOG.md +3/−0
- README.md +1/−1
- insert-ordered-containers.cabal +12/−11
- src/Data/HashMap/Strict/InsOrd.hs +21/−65
+ CHANGELOG.md view
@@ -0,0 +1,3 @@+- 0.2.0.0+ - Use `aeson-1`+ - removed our `FromJSONKey` and `ToJSONKey` in favour of `aeson` variants
README.md view
@@ -1,3 +1,3 @@ # insert-ordered-containers -Associative containers retating insertion order for traversals.+Associative containers retaining insertion order for traversals.
insert-ordered-containers.cabal view
@@ -1,9 +1,9 @@--- This file has been generated from package.yaml by hpack version 0.8.0.+-- This file has been generated from package.yaml by hpack version 0.14.0. -- -- see: https://github.com/sol/hpack name: insert-ordered-containers-version: 0.1.0.1+version: 0.2.0.0 synopsis: Associative containers retating insertion order for traversals. description: Associative containers retating insertion order for traversals. category: Web@@ -13,11 +13,12 @@ maintainer: Oleg Grenrus <oleg.grenrus@iki.fi> license: BSD3 license-file: LICENSE-tested-with: GHC==7.8.4, GHC==7.10.3, GHC==8.0.1+tested-with: GHC==7.6.3, GHC==7.8.4, GHC==7.10.3, GHC==8.0.1 build-type: Simple cabal-version: >= 1.10 extra-source-files:+ CHANGELOG.md README.md source-repository head@@ -29,12 +30,12 @@ src ghc-options: -Wall build-depends:- base >=4.7 && <4.10- , aeson >=0.8.0.2 && <0.12+ base >=4.6 && <4.10+ , aeson >=1.0.0.0 && <1.1 , base-compat >=0.6.0 && <0.10 , hashable >=1.2.3.3 && <1.4- , lens >=4.7 && <4.14- , semigroupoids >=4.3 && <5.1+ , lens >=4.7 && <4.15+ , semigroupoids >=4.3 && <5.2 , semigroups >=0.16.2.2 && <0.19 , text >=1.2.0.6 && <1.3 , transformers >=0.3.0.0 && <0.6@@ -50,12 +51,12 @@ test ghc-options: -Wall build-depends:- base >=4.7 && <4.10- , aeson >=0.8.0.2 && <0.12+ base >=4.6 && <4.10+ , aeson >=1.0.0.0 && <1.1 , base-compat >=0.6.0 && <0.10 , hashable >=1.2.3.3 && <1.4- , lens >=4.7 && <4.14- , semigroupoids >=4.3 && <5.1+ , lens >=4.7 && <4.15+ , semigroupoids >=4.3 && <5.2 , semigroups >=0.16.2.2 && <0.19 , text >=1.2.0.6 && <1.3 , transformers >=0.3.0.0 && <0.6
src/Data/HashMap/Strict/InsOrd.hs view
@@ -62,9 +62,6 @@ fromList, toHashMap, fromHashMap,- -- * Aeson extras- FromJSONKey(..),- ToJSONKey(..), -- * Lenses hashMap, unorderedTraversal,@@ -81,23 +78,19 @@ import Control.Arrow (first, second) import Data.Aeson-import qualified Data.Aeson.Types as Aeson+import qualified Data.Aeson.Encoding as E import Data.Data (Data, Typeable) import qualified Data.Foldable as F import Data.Functor.Apply (Apply (..)) import Data.Functor.Bind (Bind (..)) import Data.Hashable (Hashable (..))-import Data.List (sortBy, nub)+import Data.List (nub, sortBy) import Data.Maybe (fromMaybe) import Data.Ord (comparing) import Data.Semigroup (Semigroup (..))-import Data.Text (Text)-import qualified Data.Text as T-import qualified GHC.Exts as Exts import Text.ParserCombinators.ReadPrec (prec) import Text.Read (Lexeme (..), Read (..), lexP,- parens, readListPrecDefault,- readMaybe)+ parens, readListPrecDefault) import Control.Lens (At (..), FoldableWithIndex, FunctorWithIndex, Index, Iso, IxValue,@@ -108,6 +101,10 @@ import Data.HashMap.Strict (HashMap) import qualified Data.HashMap.Strict as HashMap +#if MIN_VERSION_base(4,7,0)+import qualified GHC.Exts as Exts+#endif+ ------------------------------------------------------------------------------- -- Strict Pair Int a -------------------------------------------------------------------------------@@ -199,78 +196,37 @@ hashWithSalt salt (InsOrdHashMap _ m) = hashWithSalt salt m +#if MIN_VERSION_base(4,7,0) instance (Eq k, Hashable k) => Exts.IsList (InsOrdHashMap k v) where type Item (InsOrdHashMap k v) = (k, v) fromList = fromList toList = toList+#endif ------------------------------------------------------------------------------- -- Aeson ------------------------------------------------------------------------------- -class ToJSONKey a where- toJSONKey :: a -> Text- - -- | Default implementations picks first element, if exists;- -- otherwise evaluates to @""@.- toJSONKeyList :: [a] -> Text- toJSONKeyList [] = T.empty- toJSONKeyList (x:_) = toJSONKey x--instance ToJSONKey Char where- toJSONKey c = T.singleton c- toJSONKeyList = T.pack--instance ToJSONKey Int where- toJSONKey = T.pack . show--instance ToJSONKey a => ToJSONKey [a] where- toJSONKey = toJSONKeyList+instance (ToJSONKey k) => ToJSON1 (InsOrdHashMap k) where+ liftToJSON t _ = case toJSONKey :: ToJSONKeyFunction k of+ ToJSONKeyText f _ -> object . fmap (\(k, v) -> (f k, t v)) . toList+ ToJSONKeyValue f _ -> toJSON . fmap (\(k,v) -> toJSON (f k, t v)) . toList -instance ToJSONKey Text where- toJSONKey = id+ liftToEncoding t _ = case toJSONKey :: ToJSONKeyFunction k of+ ToJSONKeyText _ f -> E.dict f t foldrWithKey+ ToJSONKeyValue _ f -> E.list (liftToEncoding2 f (E.list f) t (E.list t)) . toList instance (ToJSONKey k, ToJSON v) => ToJSON (InsOrdHashMap k v) where- toJSON = object . fmap f . toList- where- f (k, v) = toJSONKey k .= v--#if MIN_VERSION_aeson(0,10,0)- toEncoding = pairs . mconcat . fmap f . toList- where- f (k, v) = toJSONKey k .= v-#endif+ toJSON = toJSON1+ toEncoding = toEncoding1 ------------------------------------------------------------------------------- --- | See https://github.com/bos/aeson/pull/341-class FromJSONKey a where- parseJSONKey :: Text -> Aeson.Parser a-- -- | Default implementation parses into singleton list. 'String' @:(@- parseJSONKeyList :: Text -> Aeson.Parser [a]- parseJSONKeyList t = (:[]) <$> parseJSONKey t--instance FromJSONKey Char where- parseJSONKey t = case T.uncons t of- Just (c, r) | T.null r -> pure c- _ -> fail $ "Non-singleton json key for Char: " ++ T.unpack t- parseJSONKeyList = pure . T.unpack--instance FromJSONKey Int where- parseJSONKey t = maybe (fail "Cannot parse Int key") return $- readMaybe $ T.unpack t--instance FromJSONKey a => FromJSONKey [a] where- parseJSONKey = parseJSONKeyList--instance FromJSONKey Text where- parseJSONKey = pure+instance (Eq k, Hashable k, FromJSONKey k) => FromJSON1 (InsOrdHashMap k) where+ liftParseJSON p pl v = fromList . HashMap.toList <$> liftParseJSON p pl v instance (Eq k, Hashable k, FromJSONKey k, FromJSON v) => FromJSON (InsOrdHashMap k v) where- parseJSON = withObject "OrdHasMap k v" $ \obj ->- fmap fromList $ traverse f $ HashMap.toList obj- where f (k, v) = (,) <$> parseJSONKey k <*> parseJSON v+ parseJSON = parseJSON1 ------------------------------------------------------------------------------- -- Lens