bytes-0.11.3: Sharing code for serialization between binary and cereal

Portabilitynon-portable
Stabilityexperimental
MaintainerEdward Kmett <ekmett@gmail.com>
Safe HaskellTrustworthy

Data.Bytes.Serial

Description

This module generalizes the binary PutM and cereal PutM monads in an ad hoc fashion to permit code to be written that is compatible across them.

Moreover, this class permits code to be written to be portable over various monad transformers applied to these as base monads.

Synopsis

Documentation

class Serial a whereSource

Methods

serialize :: MonadPut m => a -> m ()Source

deserialize :: MonadGet m => m aSource

class GSerial f whereSource

Used internally to provide generic serialization

Methods

gserialize :: MonadPut m => f a -> m ()Source

gdeserialize :: MonadGet m => m (f a)Source

Instances

GSerial V1 
GSerial U1 
Serial a => GSerial (K1 i a) 
(GSerial f, GSerial g) => GSerial (:+: f g) 
(GSerial f, GSerial g) => GSerial (:*: f g) 
GSerial f => GSerial (M1 i c f) 

class Serial1 f whereSource

Methods

serializeWith :: MonadPut m => (a -> m ()) -> f a -> m ()Source

deserializeWith :: MonadGet m => m a -> m (f a)Source

Instances

Serial1 [] 
Serial1 Maybe 
Serial1 Seq 
Serial1 IntMap 
Serial1 Set 
Serial a => Serial1 (Either a) 
Serial a => Serial1 ((,) a) 
Serial k => Serial1 (Map k) 
(Serial a, Serial b) => Serial1 ((,,) a b) 
(Serial a, Serial b, Serial c) => Serial1 ((,,,) a b c) 
(Serial a, Serial b, Serial c, Serial d) => Serial1 ((,,,,) a b c d) 

serialize1 :: (MonadPut m, Serial1 f, Serial a) => f a -> m ()Source

deserialize1 :: (MonadGet m, Serial1 f, Serial a) => m (f a)Source

class GSerial1 f whereSource

Used internally to provide generic serialization

Methods

gserializeWith :: MonadPut m => (a -> m ()) -> f a -> m ()Source

gdeserializeWith :: MonadGet m => m a -> m (f a)Source

Instances

GSerial1 V1 
GSerial1 U1 
GSerial1 Par1 
GSerial1 f => GSerial1 (Rec1 f) 
Serial a => GSerial1 (K1 i a) 
(GSerial1 f, GSerial1 g) => GSerial1 (:+: f g) 
(GSerial1 f, GSerial1 g) => GSerial1 (:*: f g) 
GSerial1 f => GSerial1 (M1 i c f) 

class Serial2 f whereSource

Methods

serializeWith2 :: MonadPut m => (a -> m ()) -> (b -> m ()) -> f a b -> m ()Source

deserializeWith2 :: MonadGet m => m a -> m b -> m (f a b)Source

Instances

Serial2 Either 
Serial2 (,) 
Serial2 Map 
Serial a => Serial2 ((,,) a) 
(Serial a, Serial b) => Serial2 ((,,,) a b) 
(Serial a, Serial b, Serial c) => Serial2 ((,,,,) a b c) 

serialize2 :: (MonadPut m, Serial2 f, Serial a, Serial b) => f a b -> m ()Source

deserialize2 :: (MonadGet m, Serial2 f, Serial a, Serial b) => m (f a b)Source

store :: (MonadPut m, Storable a) => a -> m ()Source

restore :: forall m a. (MonadGet m, Storable a) => m aSource