Copyright | (c) Edward Kmett 2013-2015 |
---|---|
License | BSD3 |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Stability | experimental |
Portability | non-portable |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Data.Bytes.Serial
Description
This module contains two main classes, each providing methods to
serialize and deserialize types. Serial
is the primary class,
to be used for the canonical way to serialize a specific
type. SerialEndian
is used to provide endian-specific methods
for serializing a type.
Synopsis
- class Serial a where
- serialize :: MonadPut m => a -> m ()
- deserialize :: MonadGet m => m a
- class SerialEndian a where
- serializeBE :: MonadPut m => a -> m ()
- deserializeBE :: MonadGet m => m a
- serializeLE :: MonadPut m => a -> m ()
- deserializeLE :: MonadGet m => m a
- serializeHost :: MonadPut m => a -> m ()
- deserializeHost :: MonadGet m => m a
- class Serial1 f where
- serializeWith :: MonadPut m => (a -> m ()) -> f a -> m ()
- deserializeWith :: MonadGet m => m a -> m (f a)
- serialize1 :: (MonadPut m, Serial1 f, Serial a) => f a -> m ()
- deserialize1 :: (MonadGet m, Serial1 f, Serial a) => m (f a)
- class Serial2 f where
- serializeWith2 :: MonadPut m => (a -> m ()) -> (b -> m ()) -> f a b -> m ()
- deserializeWith2 :: MonadGet m => m a -> m b -> m (f a b)
- serialize2 :: (MonadPut m, Serial2 f, Serial a, Serial b) => f a b -> m ()
- deserialize2 :: (MonadGet m, Serial2 f, Serial a, Serial b) => m (f a b)
- store :: (MonadPut m, Storable a) => a -> m ()
- restore :: forall m a. (MonadGet m, Storable a) => m a
- class GSerial f where
- gserialize :: MonadPut m => f a -> m ()
- gdeserialize :: MonadGet m => m (f a)
- class GSerialEndian f where
- gserializeBE :: MonadPut m => f a -> m ()
- gdeserializeBE :: MonadGet m => m (f a)
- gserializeLE :: MonadPut m => f a -> m ()
- gdeserializeLE :: MonadGet m => m (f a)
- class GSerial1 f where
- gserializeWith :: MonadPut m => (a -> m ()) -> f a -> m ()
- gdeserializeWith :: MonadGet m => m a -> m (f a)
Serialization
Methods to serialize and deserialize type a
to a binary representation
Instances provided here for fixed-with Integers and Words are big endian. Instances for strict and lazy bytestrings store also the length of bytestring big endian. Instances for Word and Int are host endian as they are machine-specific types.
Minimal complete definition
Nothing
Methods
serialize :: MonadPut m => a -> m () Source #
deserialize :: MonadGet m => m a Source #
default deserialize :: (MonadGet m, GSerial (Rep a), Generic a) => m a Source #
Instances
Serial All Source # | |
Defined in Data.Bytes.Serial | |
Serial Any Source # | |
Defined in Data.Bytes.Serial | |
Serial Version Source # | |
Defined in Data.Bytes.Serial | |
Serial Void Source # | |
Defined in Data.Bytes.Serial | |
Serial Int16 Source # | |
Defined in Data.Bytes.Serial | |
Serial Int32 Source # | |
Defined in Data.Bytes.Serial | |
Serial Int64 Source # | |
Defined in Data.Bytes.Serial | |
Serial Int8 Source # | |
Defined in Data.Bytes.Serial | |
Serial Word16 Source # | |
Defined in Data.Bytes.Serial | |
Serial Word32 Source # | |
Defined in Data.Bytes.Serial | |
Serial Word64 Source # | |
Defined in Data.Bytes.Serial | |
Serial Word8 Source # | |
Defined in Data.Bytes.Serial | |
Serial ByteString Source # | |
Defined in Data.Bytes.Serial | |
Serial ByteString Source # | |
Defined in Data.Bytes.Serial | |
Serial IntSet Source # | |
Defined in Data.Bytes.Serial | |
Serial Ordering Source # |
|
Defined in Data.Bytes.Serial | |
Serial Scientific Source # | |
Defined in Data.Bytes.Serial | |
Serial Text Source # | |
Defined in Data.Bytes.Serial | |
Serial Text Source # | |
Defined in Data.Bytes.Serial | |
Serial Day Source # |
|
Defined in Data.Bytes.Serial | |
Serial AbsoluteTime Source # |
|
Defined in Data.Bytes.Serial | |
Serial DiffTime Source # |
|
Defined in Data.Bytes.Serial | |
Serial NominalDiffTime Source # |
|
Defined in Data.Bytes.Serial | |
Serial UTCTime Source # |
|
Defined in Data.Bytes.Serial | |
Serial UniversalTime Source # |
|
Defined in Data.Bytes.Serial | |
Serial LocalTime Source # | |
Defined in Data.Bytes.Serial | |
Serial TimeOfDay Source # | |
Defined in Data.Bytes.Serial | |
Serial TimeZone Source # | |
Defined in Data.Bytes.Serial | |
Serial ZonedTime Source # | |
Defined in Data.Bytes.Serial | |
Serial Integer Source # |
|
Defined in Data.Bytes.Serial | |
Serial Natural Source # |
|
Defined in Data.Bytes.Serial | |
Serial () Source # | |
Defined in Data.Bytes.Serial | |
Serial Bool Source # | |
Defined in Data.Bytes.Serial | |
Serial Char Source # | |
Defined in Data.Bytes.Serial | |
Serial Double Source # | |
Defined in Data.Bytes.Serial | |
Serial Float Source # | |
Defined in Data.Bytes.Serial | |
Serial Int Source # | |
Defined in Data.Bytes.Serial | |
Serial Word Source # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (ZipList a) Source # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Identity a) Source # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (First a) Source # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Last a) Source # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Down a) Source # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Dual a) Source # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Product a) Source # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Sum a) Source # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (NonEmpty a) Source # | |
Defined in Data.Bytes.Serial | |
(Serial a, Integral a) => Serial (Ratio a) Source # |
|
Defined in Data.Bytes.Serial | |
(Bits n, Integral n, Bits (Unsigned n), Integral (Unsigned n)) => Serial (VarInt n) Source # | Integer/Word types serialized to base-128 variable-width ints.
|
Serial v => Serial (IntMap v) Source # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Seq a) Source # | |
Defined in Data.Bytes.Serial | |
(Serial a, Ord a) => Serial (Set a) Source # | |
Defined in Data.Bytes.Serial | |
(Serial v, Hashable v, Eq v) => Serial (HashSet v) Source # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Maybe a) Source # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial [a] Source # | |
Defined in Data.Bytes.Serial | |
(Serial a, Serial b) => Serial (Either a b) Source # | |
Defined in Data.Bytes.Serial | |
HasResolution a => Serial (Fixed a) Source # |
|
Defined in Data.Bytes.Serial | |
(Serial k, Serial v, Ord k) => Serial (Map k v) Source # | |
Defined in Data.Bytes.Serial | |
(Serial k, Serial v, Hashable k, Eq k) => Serial (HashMap k v) Source # | |
Defined in Data.Bytes.Serial | |
(Serial a, Serial b) => Serial (a, b) Source # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Constant a b) Source # | |
Defined in Data.Bytes.Serial | |
Serial (f a) => Serial (Reverse f a) Source # | |
Defined in Data.Bytes.Serial | |
(Serial a, Serial b, Serial c) => Serial (a, b, c) Source # | |
Defined in Data.Bytes.Serial | |
(Serial (f a), Serial (g a)) => Serial (Product f g a) Source # | |
Defined in Data.Bytes.Serial | |
(Serial a, Serial b, Serial c, Serial d) => Serial (a, b, c, d) Source # | |
Defined in Data.Bytes.Serial | |
(Serial a, Serial b, Serial c, Serial d, Serial e) => Serial (a, b, c, d, e) Source # | |
Defined in Data.Bytes.Serial |
Specifying endianness
class SerialEndian a where Source #
Methods to serialize and deserialize type a
to a big and little endian
binary representations. Methods suffixed with "host" are automatically defined
to use equal the methods corresponding to the current machine's native
endianness, but they can be overridden.
Minimal complete definition
Nothing
Methods
serializeBE :: MonadPut m => a -> m () Source #
default serializeBE :: (MonadPut m, GSerialEndian (Rep a), Generic a) => a -> m () Source #
deserializeBE :: MonadGet m => m a Source #
default deserializeBE :: (MonadGet m, GSerialEndian (Rep a), Generic a) => m a Source #
serializeLE :: MonadPut m => a -> m () Source #
default serializeLE :: (MonadPut m, GSerialEndian (Rep a), Generic a) => a -> m () Source #
deserializeLE :: MonadGet m => m a Source #
default deserializeLE :: (MonadGet m, GSerialEndian (Rep a), Generic a) => m a Source #
serializeHost :: MonadPut m => a -> m () Source #
deserializeHost :: MonadGet m => m a Source #
Instances
Higher-order
These classes provide us with the ability to serialize containers that need polymorphic recursion.
class Serial1 f where Source #
Minimal complete definition
Nothing
Methods
serializeWith :: MonadPut m => (a -> m ()) -> f a -> m () Source #
default serializeWith :: (MonadPut m, GSerial1 (Rep1 f), Generic1 f) => (a -> m ()) -> f a -> m () Source #
deserializeWith :: MonadGet m => m a -> m (f a) Source #
default deserializeWith :: (MonadGet m, GSerial1 (Rep1 f), Generic1 f) => m a -> m (f a) Source #
Instances
Serial1 NonEmpty Source # | |
Defined in Data.Bytes.Serial Methods serializeWith :: MonadPut m => (a -> m ()) -> NonEmpty a -> m () Source # deserializeWith :: MonadGet m => m a -> m (NonEmpty a) Source # | |
Serial1 IntMap Source # | |
Defined in Data.Bytes.Serial Methods serializeWith :: MonadPut m => (a -> m ()) -> IntMap a -> m () Source # deserializeWith :: MonadGet m => m a -> m (IntMap a) Source # | |
Serial1 Seq Source # | |
Defined in Data.Bytes.Serial Methods serializeWith :: MonadPut m => (a -> m ()) -> Seq a -> m () Source # deserializeWith :: MonadGet m => m a -> m (Seq a) Source # | |
Serial1 Maybe Source # | |
Defined in Data.Bytes.Serial Methods serializeWith :: MonadPut m => (a -> m ()) -> Maybe a -> m () Source # deserializeWith :: MonadGet m => m a -> m (Maybe a) Source # | |
Serial1 List Source # | |
Defined in Data.Bytes.Serial Methods serializeWith :: MonadPut m => (a -> m ()) -> [a] -> m () Source # deserializeWith :: MonadGet m => m a -> m [a] Source # | |
Serial a => Serial1 (Either a) Source # | |
Defined in Data.Bytes.Serial Methods serializeWith :: MonadPut m => (a0 -> m ()) -> Either a a0 -> m () Source # deserializeWith :: MonadGet m => m a0 -> m (Either a a0) Source # | |
(Ord k, Serial k) => Serial1 (Map k) Source # | |
Defined in Data.Bytes.Serial Methods serializeWith :: MonadPut m => (a -> m ()) -> Map k a -> m () Source # deserializeWith :: MonadGet m => m a -> m (Map k a) Source # | |
(Hashable k, Eq k, Serial k) => Serial1 (HashMap k) Source # | |
Defined in Data.Bytes.Serial Methods serializeWith :: MonadPut m => (a -> m ()) -> HashMap k a -> m () Source # deserializeWith :: MonadGet m => m a -> m (HashMap k a) Source # | |
Serial a => Serial1 ((,) a) Source # | |
Defined in Data.Bytes.Serial Methods serializeWith :: MonadPut m => (a0 -> m ()) -> (a, a0) -> m () Source # deserializeWith :: MonadGet m => m a0 -> m (a, a0) Source # | |
(Serial a, Serial b) => Serial1 ((,,) a b) Source # | |
Defined in Data.Bytes.Serial Methods serializeWith :: MonadPut m => (a0 -> m ()) -> (a, b, a0) -> m () Source # deserializeWith :: MonadGet m => m a0 -> m (a, b, a0) Source # | |
(Serial a, Serial b, Serial c) => Serial1 ((,,,) a b c) Source # | |
Defined in Data.Bytes.Serial Methods serializeWith :: MonadPut m => (a0 -> m ()) -> (a, b, c, a0) -> m () Source # deserializeWith :: MonadGet m => m a0 -> m (a, b, c, a0) Source # | |
(Serial a, Serial b, Serial c, Serial d) => Serial1 ((,,,,) a b c d) Source # | |
Defined in Data.Bytes.Serial Methods serializeWith :: MonadPut m => (a0 -> m ()) -> (a, b, c, d, a0) -> m () Source # deserializeWith :: MonadGet m => m a0 -> m (a, b, c, d, a0) Source # |
class Serial2 f where Source #
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 Source # | |
Defined in Data.Bytes.Serial Methods serializeWith2 :: MonadPut m => (a -> m ()) -> (b -> m ()) -> Either a b -> m () Source # deserializeWith2 :: MonadGet m => m a -> m b -> m (Either a b) Source # | |
Serial2 (,) Source # | |
Defined in Data.Bytes.Serial Methods serializeWith2 :: MonadPut m => (a -> m ()) -> (b -> m ()) -> (a, b) -> m () Source # deserializeWith2 :: MonadGet m => m a -> m b -> m (a, b) Source # | |
Serial a => Serial2 ((,,) a) Source # | |
Defined in Data.Bytes.Serial Methods serializeWith2 :: MonadPut m => (a0 -> m ()) -> (b -> m ()) -> (a, a0, b) -> m () Source # deserializeWith2 :: MonadGet m => m a0 -> m b -> m (a, a0, b) Source # | |
(Serial a, Serial b) => Serial2 ((,,,) a b) Source # | |
Defined in Data.Bytes.Serial Methods serializeWith2 :: MonadPut m => (a0 -> m ()) -> (b0 -> m ()) -> (a, b, a0, b0) -> m () Source # deserializeWith2 :: MonadGet m => m a0 -> m b0 -> m (a, b, a0, b0) Source # | |
(Serial a, Serial b, Serial c) => Serial2 ((,,,,) a b c) Source # | |
Defined in Data.Bytes.Serial Methods serializeWith2 :: MonadPut m => (a0 -> m ()) -> (b0 -> m ()) -> (a, b, c, a0, b0) -> m () Source # deserializeWith2 :: MonadGet m => m a0 -> m b0 -> m (a, b, c, a0, b0) Source # |
Storable
store :: (MonadPut m, Storable a) => a -> m () Source #
serialize any Storable
in a host-specific format.
restore :: forall m a. (MonadGet m, Storable a) => m a Source #
deserialize any Storable
in a host-specific format.
Generics
You probably will never need to care that these exist except they
provide us with default definitions for Serial
and SerialEndian
class GSerial f where Source #
Used internally to provide generic serialization
Methods
gserialize :: MonadPut m => f a -> m () Source #
gdeserialize :: MonadGet m => m (f a) Source #
Instances
GSerial (U1 :: Type -> Type) Source # | |
Defined in Data.Bytes.Serial Methods gserialize :: MonadPut m => U1 a -> m () Source # gdeserialize :: MonadGet m => m (U1 a) Source # | |
GSerial (V1 :: Type -> Type) Source # | |
Defined in Data.Bytes.Serial Methods gserialize :: MonadPut m => V1 a -> m () Source # gdeserialize :: MonadGet m => m (V1 a) Source # | |
(GSerial f, GSerial g) => GSerial (f :*: g) Source # | |
Defined in Data.Bytes.Serial Methods gserialize :: MonadPut m => (f :*: g) a -> m () Source # gdeserialize :: MonadGet m => m ((f :*: g) a) Source # | |
(GSerial f, GSerial g) => GSerial (f :+: g) Source # | |
Defined in Data.Bytes.Serial Methods gserialize :: MonadPut m => (f :+: g) a -> m () Source # gdeserialize :: MonadGet m => m ((f :+: g) a) Source # | |
Serial a => GSerial (K1 i a :: Type -> Type) Source # | |
Defined in Data.Bytes.Serial Methods gserialize :: MonadPut m => K1 i a a0 -> m () Source # gdeserialize :: MonadGet m => m (K1 i a a0) Source # | |
GSerial f => GSerial (M1 i c f) Source # | |
Defined in Data.Bytes.Serial Methods gserialize :: MonadPut m => M1 i c f a -> m () Source # gdeserialize :: MonadGet m => m (M1 i c f a) Source # |
class GSerialEndian f where Source #
Used internally to provide generic big-endian serialization
Minimal complete definition
Nothing
Methods
gserializeBE :: MonadPut m => f a -> m () Source #
default gserializeBE :: (MonadPut m, GSerial f) => f a -> m () Source #
gdeserializeBE :: MonadGet m => m (f a) Source #
default gdeserializeBE :: (MonadGet m, GSerial f) => m (f a) Source #
gserializeLE :: MonadPut m => f a -> m () Source #
default gserializeLE :: (MonadPut m, GSerial f) => f a -> m () Source #
gdeserializeLE :: MonadGet m => m (f a) Source #
default gdeserializeLE :: (MonadGet m, GSerial f) => m (f a) Source #
Instances
SerialEndian a => GSerialEndian (K1 i a :: Type -> Type) Source # | |
Defined in Data.Bytes.Serial Methods gserializeBE :: MonadPut m => K1 i a a0 -> m () Source # gdeserializeBE :: MonadGet m => m (K1 i a a0) Source # gserializeLE :: MonadPut m => K1 i a a0 -> m () Source # gdeserializeLE :: MonadGet m => m (K1 i a a0) Source # |
class GSerial1 f where Source #
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 Par1 Source # | |
Defined in Data.Bytes.Serial Methods gserializeWith :: MonadPut m => (a -> m ()) -> Par1 a -> m () Source # gdeserializeWith :: MonadGet m => m a -> m (Par1 a) Source # | |
GSerial1 (U1 :: Type -> Type) Source # | |
Defined in Data.Bytes.Serial Methods gserializeWith :: MonadPut m => (a -> m ()) -> U1 a -> m () Source # gdeserializeWith :: MonadGet m => m a -> m (U1 a) Source # | |
GSerial1 (V1 :: Type -> Type) Source # | |
Defined in Data.Bytes.Serial Methods gserializeWith :: MonadPut m => (a -> m ()) -> V1 a -> m () Source # gdeserializeWith :: MonadGet m => m a -> m (V1 a) Source # | |
Serial1 f => GSerial1 (Rec1 f) Source # | |
Defined in Data.Bytes.Serial Methods gserializeWith :: MonadPut m => (a -> m ()) -> Rec1 f a -> m () Source # gdeserializeWith :: MonadGet m => m a -> m (Rec1 f a) Source # | |
(GSerial1 f, GSerial1 g) => GSerial1 (f :*: g) Source # | |
Defined in Data.Bytes.Serial Methods gserializeWith :: MonadPut m => (a -> m ()) -> (f :*: g) a -> m () Source # gdeserializeWith :: MonadGet m => m a -> m ((f :*: g) a) Source # | |
(GSerial1 f, GSerial1 g) => GSerial1 (f :+: g) Source # | |
Defined in Data.Bytes.Serial Methods gserializeWith :: MonadPut m => (a -> m ()) -> (f :+: g) a -> m () Source # gdeserializeWith :: MonadGet m => m a -> m ((f :+: g) a) Source # | |
Serial a => GSerial1 (K1 i a :: Type -> Type) Source # | |
Defined in Data.Bytes.Serial Methods gserializeWith :: MonadPut m => (a0 -> m ()) -> K1 i a a0 -> m () Source # gdeserializeWith :: MonadGet m => m a0 -> m (K1 i a a0) Source # | |
(Serial1 f, GSerial1 g) => GSerial1 (f :.: g) Source # | |
Defined in Data.Bytes.Serial Methods gserializeWith :: MonadPut m => (a -> m ()) -> (f :.: g) a -> m () Source # gdeserializeWith :: MonadGet m => m a -> m ((f :.: g) a) Source # | |
GSerial1 f => GSerial1 (M1 i c f) Source # | |
Defined in Data.Bytes.Serial Methods gserializeWith :: MonadPut m => (a -> m ()) -> M1 i c f a -> m () Source # gdeserializeWith :: MonadGet m => m a -> m (M1 i c f a) Source # |