generic-binary 1.0.0 → 1.0.1
raw patch · 2 files changed
+19/−4 lines, 2 filesdep +bytestringPVP ok
version bump matches the API change (PVP)
Dependencies added: bytestring
API changes (from Hackage documentation)
+ Data.Binary.Generic: decode :: (Generic a, GBinary (Rep a)) => ByteString -> a
+ Data.Binary.Generic: encode :: (Generic a, GBinary (Rep a)) => a -> ByteString
Files
- generic-binary.cabal +2/−1
- src/Data/Binary/Generic.hs +17/−3
generic-binary.cabal view
@@ -1,5 +1,5 @@ Name: generic-binary-Version: 1.0.0+Version: 1.0.1 Description: Generic Data.Binary derivation using GHC generics. Synopsis: Generic Data.Binary derivation using GHC generics. Category: Generics, Data@@ -22,3 +22,4 @@ Build-Depends: base >= 4.0 && < 4.5 , ghc-prim < 0.3 , binary >= 0.5 && < 0.6+ , bytestring >= 0.9 && < 0.10
src/Data/Binary/Generic.hs view
@@ -3,14 +3,28 @@ , FlexibleInstances , TypeOperators #-}-module Data.Binary.Generic (put, get) where+module Data.Binary.Generic+( encode+, decode+, put+, get+) where import Control.Applicative import GHC.Generics-import Data.Binary hiding (put, get)+import Data.Binary (Binary, Put, Get)+import Data.Binary.Get (runGet)+import Data.Binary.Put (runPut)+import Data.ByteString.Lazy import qualified Data.Binary as B +encode :: (Generic a, GBinary (Rep a)) => a -> ByteString+encode = runPut . put++decode :: (Generic a, GBinary (Rep a)) => ByteString -> a+decode = runGet get+ put :: (Generic a, GBinary (Rep a)) => a -> Put put = gput . from @@ -32,7 +46,7 @@ instance (GBinary a, GBinary b) => GBinary (a :+: b) where gput (L1 l) = do B.put False; gput l gput (R1 r) = do B.put True; gput r- gget = B.get >>= \v -> if v then L1 <$> gget else R1 <$> gget+ gget = B.get >>= \v -> if not v then L1 <$> gget else R1 <$> gget instance GBinary a => GBinary (M1 D c a) where gput = gput . unM1