packages feed

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