packages feed

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 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