safecopy 0.5.1 → 0.6.0
raw patch · 4 files changed
+47/−30 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Data.SafeCopy: Prim :: a -> Prim a
+ Data.SafeCopy: getPrimitive :: Prim a -> a
+ Data.SafeCopy: newtype Prim a
Files
- safecopy.cabal +4/−1
- src/Data/SafeCopy.hs +1/−0
- src/Data/SafeCopy/Instances.hs +26/−29
- src/Data/SafeCopy/SafeCopy.hs +16/−0
safecopy.cabal view
@@ -7,7 +7,7 @@ -- The package version. See the Haskell package versioning policy -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for -- standards guiding when and how versions should be incremented.-Version: 0.5.1+Version: 0.6.0 -- A short (one-line) description of the package. Synopsis: Binary serialization with version control.@@ -61,3 +61,6 @@ -- Build-tools: GHC-Options: -Wall++ if(impl(ghc >= 7.2.1))+ cpp-options: -DDEFAULT_SIGNATURES
src/Data/SafeCopy.hs view
@@ -74,6 +74,7 @@ safeGet , safePut , SafeCopy(version, kind, getCopy, putCopy)+ , Prim(..) , Migrate(..) , Kind , extension
src/Data/SafeCopy/Instances.hs view
@@ -35,8 +35,15 @@ import System.Time (ClockTime(..), TimeDiff(..), CalendarTime(..), Month(..)) import qualified System.Time as OT +instance SafeCopy a => SafeCopy (Prim a) where+ kind = primitive+ getCopy = contain $+ do e <- unsafeUnPack getCopy+ return $ Prim e+ putCopy (Prim e)+ = contain $ unsafeUnPack (putCopy e)+ instance SafeCopy a => SafeCopy [a] where- kind = primitive getCopy = contain $ do n <- get getSafeGet >>= replicateM n@@ -46,7 +53,6 @@ getSafePut >>= forM_ lst instance SafeCopy a => SafeCopy (Maybe a) where- kind = primitive getCopy = contain $ do n <- get if n then liftM Just safeGet else return Nothing@@ -102,31 +108,25 @@ instance (SafeCopy a, SafeCopy b) => SafeCopy (a,b) where- kind = primitive getCopy = contain $ liftM2 (,) safeGet safeGet putCopy (a,b) = contain $ safePut a >> safePut b instance (SafeCopy a, SafeCopy b, SafeCopy c) => SafeCopy (a,b,c) where- kind = primitive getCopy = contain $ liftM3 (,,) safeGet safeGet safeGet putCopy (a,b,c) = contain $ safePut a >> safePut b >> safePut c instance (SafeCopy a, SafeCopy b, SafeCopy c, SafeCopy d) => SafeCopy (a,b,c,d) where- kind = primitive getCopy = contain $ liftM4 (,,,) safeGet safeGet safeGet safeGet putCopy (a,b,c,d) = contain $ safePut a >> safePut b >> safePut c >> safePut d instance (SafeCopy a, SafeCopy b, SafeCopy c, SafeCopy d, SafeCopy e) => SafeCopy (a,b,c,d,e) where- kind = primitive getCopy = contain $ liftM5 (,,,,) safeGet safeGet safeGet safeGet safeGet putCopy (a,b,c,d,e) = contain $ safePut a >> safePut b >> safePut c >> safePut d >> safePut e instance (SafeCopy a, SafeCopy b, SafeCopy c, SafeCopy d, SafeCopy e, SafeCopy f) => SafeCopy (a,b,c,d,e,f) where- kind = primitive getCopy = contain $ (,,,,,) <$> safeGet <*> safeGet <*> safeGet <*> safeGet <*> safeGet <*> safeGet putCopy (a,b,c,d,e,f) = contain $ safePut a >> safePut b >> safePut c >> safePut d >> safePut e >> safePut f instance (SafeCopy a, SafeCopy b, SafeCopy c, SafeCopy d, SafeCopy e, SafeCopy f, SafeCopy g) => SafeCopy (a,b,c,d,e,f,g) where- kind = primitive getCopy = contain $ (,,,,,,) <$> safeGet <*> safeGet <*> safeGet <*> safeGet <*> safeGet <*> safeGet <*> safeGet putCopy (a,b,c,d,e,f,g) = contain $ safePut a >> safePut b >> safePut c >> safePut d >>@@ -134,55 +134,52 @@ instance SafeCopy Int where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy Integer where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy Float where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy Double where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy L.ByteString where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy B.ByteString where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy Char where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy Word8 where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy Word16 where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy Word32 where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy Word64 where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy Ordering where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy Int8 where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy Int16 where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy Int32 where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy Int64 where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance (Integral a, SafeCopy a) => SafeCopy (Ratio a) where- kind = primitive; getCopy = contain $ do n <- safeGet d <- safeGet return (n % d) putCopy r = contain $ do safePut (numerator r) safePut (denominator r) instance (HasResolution a, Fractional (Fixed a)) => SafeCopy (Fixed a) where- kind = primitive getCopy = contain $ fromRational <$> safeGet putCopy = contain . safePut . toRational instance SafeCopy () where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance SafeCopy Bool where- kind = primitive; getCopy = contain get; putCopy = contain . put+ getCopy = contain get; putCopy = contain . put instance (SafeCopy a, SafeCopy b) => SafeCopy (Either a b) where- kind = primitive getCopy = contain $ do n <- get if n then liftM Right safeGet else liftM Left safeGet
src/Data/SafeCopy/SafeCopy.hs view
@@ -1,5 +1,11 @@ {-# LANGUAGE GADTs, TypeFamilies, FlexibleContexts #-} {-# LANGUAGE ScopedTypeVariables #-}++{-# LANGUAGE CPP #-}+#ifdef DEFAULT_SIGNATURES+{-# LANGUAGE DefaultSignatures #-}+#endif+ ----------------------------------------------------------------------------- -- | -- Module : Data.SafeCopy.SafeCopy@@ -51,6 +57,9 @@ Base :: Kind a Extends :: (Migrate a) => Proxy (MigrateFrom a) -> Kind a +-- | Wrapper for data that was saved without a version tag.+newtype Prim a = Prim { getPrimitive :: a }+ -- | The centerpiece of this library. Defines a version for a data type -- together with how it should be serialized/parsed. --@@ -100,6 +109,13 @@ proxy = proxyFromConsistency ret in ret +#ifdef DEFAULT_SIGNATURES+ default getCopy :: Serialize a => Contained (Get a)+ getCopy = contain get++ default putCopy :: Serialize a => a -> Contained Put+ putCopy = contain . put+#endif constructGetterFromVersion :: SafeCopy a => Version a -> Proxy a -> Get a