store 0.7.1 → 0.7.2
raw patch · 3 files changed
+33/−15 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Data.Store.Internal: instance (Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector a), Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector b)) => Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (Data.Semigroup.Arg a b))
+ Data.Store.Internal: instance Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (f (g a))) => Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (Data.Functor.Compose.Compose f g a))
+ Data.Store.Internal: instance Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (f a)) => Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (Data.Semigroup.Internal.Alt f a))
+ Data.Store.Internal: instance Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector Data.Semigroup.Internal.All)
+ Data.Store.Internal: instance Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector Data.Semigroup.Internal.Any)
+ Data.Store.Internal: instance Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector a) => Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (Data.Functor.Const.Const a b))
+ Data.Store.Internal: instance Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector a) => Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (Data.Functor.Identity.Identity a))
+ Data.Store.Internal: instance Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector a) => Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (Data.Ord.Down a))
+ Data.Store.Internal: instance Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector a) => Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (Data.Semigroup.First a))
+ Data.Store.Internal: instance Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector a) => Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (Data.Semigroup.Internal.Dual a))
+ Data.Store.Internal: instance Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector a) => Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (Data.Semigroup.Internal.Product a))
+ Data.Store.Internal: instance Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector a) => Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (Data.Semigroup.Internal.Sum a))
+ Data.Store.Internal: instance Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector a) => Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (Data.Semigroup.Last a))
+ Data.Store.Internal: instance Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector a) => Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (Data.Semigroup.Max a))
+ Data.Store.Internal: instance Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector a) => Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (Data.Semigroup.Min a))
+ Data.Store.Internal: instance Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector a) => Data.Store.Impl.Store (Data.Vector.Unboxed.Base.Vector (Data.Semigroup.WrappedMonoid a))
Files
- ChangeLog.md +8/−0
- src/Data/Store/TH/Internal.hs +23/−13
- store.cabal +2/−2
ChangeLog.md view
@@ -1,5 +1,13 @@ # ChangeLog +## 0.7.2++* Fixes compilation with `vector >= 0.12.1.1` by making+ `deriveManyStoreUnboxVector` capable of handling more complex+ instance constraints. In particular, it now correctly generates+ instances `Store (Vector (f (g a))) => Store (Vector (Compose f g+ a))` and `Store (Vector (f a)) => Store (Vector (Alt f a))`.+ ## 0.7.1 * Fixes compilation with GHC-7.10 due to it not defining `Generic`
src/Data/Store/TH/Internal.hs view
@@ -347,24 +347,32 @@ deriveManyStoreUnboxVector = do unboxes <- getUnboxInfo stores <- postprocess . instancesMap <$> getInstances ''Store- let unboxInsts =+ unboxInstances <- postprocess . instancesMap <$> getInstances ''UV.Unbox+ let dataFamilyDecls = M.fromList (map (\(preds, ty, cons) -> ([AppT (ConT ''UV.Vector) ty], (preds, cons))) unboxes) `M.difference` stores+#if MIN_VERSION_template_haskell(2,10,0)+ substituteConstraint (AppT (ConT n) arg)+ | n == ''UV.Unbox = AppT (ConT ''Store) (AppT (ConT ''UV.Vector) arg)+#else+ substituteConstraint (ClassP n [arg])+ | n == ''UV.Unbox = ClassP ''Store [AppT (ConT ''UV.Vector) arg]+#endif+ substituteConstraint x = x -- TODO: ideally this would use a variant of 'deriveStore' which -- assumes VarSize.- forM (M.toList unboxInsts) $ \case- ([ty], (preds, cons)) -> do- {-- -- While this approach is reasonable-ish, it ends up- -- requiring UndecidableInstances.- let extraPreds =- map (AppT (ConT ''Store)) $- filter (not . isMonoType) $- concatMap (map snd . dcFields) cons- -}- let extraPreds = map (storePred . AppT (ConT ''UV.Vector)) $ listify isVarT ty- deriveStore (nub (preds ++ extraPreds)) ty cons+ forM (M.toList dataFamilyDecls) $ \case+ ([ty], (_, cons)) -> do+ let headTy = getTyHead (unAppsT ty !! 1)+ (preds, ty') <- case M.lookup [headTy] unboxInstances of+ Nothing -> do+ reportWarning $ "No Unbox instance found for " ++ pprint headTy+ return ([], ty)+ Just (TypeclassInstance cs (AppT _ ty') _) ->+ return (map substituteConstraint cs, AppT (ConT ''UV.Vector) ty')+ Just _ -> fail "Impossible case"+ deriveStore preds ty' cons _ -> fail "impossible case in deriveManyStoreUnboxVector" -- TODO: Add something for this purpose to TH.ReifyDataType@@ -389,8 +397,10 @@ go (DataInstD preds _ [ty] cons _) = (preds, ty, concatMap conToDataCons cons) #endif go x = error ("Unexpected result from reifying Unboxed Vector instances: " ++ pprint x)+ dequalVarT :: Type -> Type dequalVarT (VarT n) = VarT (dequalify n) dequalVarT ty = ty+ ------------------------------------------------------------------------ -- Utilities
store.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: d5e9f1dc824c80abb31d16173dc0f03262e5125f67a92e81d0c5da4796ed8a26+-- hash: 196a4a2e4a6b3e3eaf65b19fdbd12fea95fc3f94de915299ff2ebd319ba41302 name: store-version: 0.7.1+version: 0.7.2 synopsis: Fast binary serialization category: Serialization, Data homepage: https://github.com/fpco/store#readme