store 0.6.1 → 0.7.0
raw patch · 4 files changed
+30/−6 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Data.Store.Internal: instance Foreign.Storable.Storable a => Data.Store.Impl.Store (Data.Complex.Complex a)
- Data.Store.Internal: instance Foreign.Storable.Storable a => Data.Store.Impl.Store (Data.Functor.Const.Const a b)
- Data.Store.Internal: instance Foreign.Storable.Storable a => Data.Store.Impl.Store (Data.Functor.Identity.Identity a)
+ Data.Store.Internal: instance Data.Store.Impl.Store a => Data.Store.Impl.Store (Data.Complex.Complex a)
+ Data.Store.Internal: instance Data.Store.Impl.Store a => Data.Store.Impl.Store (Data.Functor.Const.Const a b)
+ Data.Store.Internal: instance Data.Store.Impl.Store a => Data.Store.Impl.Store (Data.Functor.Identity.Identity a)
Files
- ChangeLog.md +8/−0
- src/Data/Store/Internal.hs +5/−0
- src/Data/Store/TH/Internal.hs +15/−4
- store.cabal +2/−2
ChangeLog.md view
@@ -1,5 +1,13 @@ # ChangeLog +## 0.7.0++* Fixes a bug where the `Store` instances for `Identity`, `Const`, and+ `Complex` all have `Storable` superclasses instead of `Store. See+ [#143][].++[#143]: https://github.com/fpco/store/issues/143+ ## 0.6.1 * Can now optionally be built with `integer-simple` instead of
src/Data/Store/Internal.hs view
@@ -76,10 +76,12 @@ import qualified Data.ByteString.Lazy as LBS import qualified Data.ByteString.Short.Internal as SBS import Data.Containers (IsMap, ContainerKey, MapValue, mapFromList, mapToList, IsSet, setFromList)+import Data.Complex (Complex) import Data.Data (Data) import Data.Fixed (Fixed (..), Pico) import Data.Foldable (forM_, foldl') import Data.Functor.Contravariant+import Data.Functor.Identity (Identity) import Data.HashMap.Strict (HashMap) import Data.HashSet (HashSet) import Data.Hashable (Hashable)@@ -741,6 +743,9 @@ instance Store a => Store (First a) instance Store a => Store (Last a) instance Store a => Store (Maybe a)+instance Store a => Store (Identity a)+instance Store a => Store (Complex a)+instance Store a => Store (Const a b) -- FIXME: have TH deriving handle unboxed fields?
src/Data/Store/TH/Internal.hs view
@@ -24,11 +24,11 @@ import Control.Applicative import Data.Complex ()-import Data.Generics.Aliases (extT)-import Data.Generics.Schemes (listify, everywhere)+import Data.Generics.Aliases (extT, mkQ, extQ)+import Data.Generics.Schemes (listify, everywhere, something) import Data.List (find, nub) import qualified Data.Map as M-import Data.Maybe (fromMaybe)+import Data.Maybe (fromMaybe, isJust) import Data.Primitive.ByteArray import Data.Primitive.Types import Data.Store.Core@@ -287,12 +287,23 @@ \(TypeclassInstance cs ty _) -> let argTy = head (tail (unAppsT ty)) tyNameLit = LitE (StringL (pprint ty)) in- if p argTy+ if p argTy && not (superclassHasStorable cs) then Just $ makeStoreInstance cs argTy (AppE (VarE 'sizeStorableTy) tyNameLit) (AppE (VarE 'peekStorableTy) tyNameLit) (VarE 'pokeStorable) else Nothing++-- See #143. Often Storable superclass constraints should instead be+-- Store constraints, so instead it just warns for these.+superclassHasStorable :: Cxt -> Bool+superclassHasStorable = isJust . something (mkQ Nothing justStorable `extQ` ignoreStrings)+ where+ justStorable :: Type -> Maybe ()+ justStorable (ConT n) | n == ''Storable = Just ()+ justStorable _ = Nothing+ ignoreStrings :: String -> Maybe ()+ ignoreStrings _ = Nothing ------------------------------------------------------------------------ -- Vector
store.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: ed0f087802fae2b44eeecb3e8163cf7c263fe0b11167686dae1faa5c23a13ed8+-- hash: e97026b3dd607ae815326e726b09a470b5b4bb879c5d9faaee87ef206e9a4830 name: store-version: 0.6.1+version: 0.7.0 synopsis: Fast binary serialization category: Serialization, Data homepage: https://github.com/fpco/store#readme