Copyright | (c) Edward Kmett 2013-2015 |
---|---|
License | BSD3 |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Stability | experimental |
Portability | non-portable |
Safe Haskell | Trustworthy |
Language | Haskell98 |
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.
Nothing
serialize :: MonadPut m => a -> m () #
serialize :: (MonadPut m, GSerial (Rep a), Generic a) => a -> m () #
deserialize :: MonadGet m => m a #
deserialize :: (MonadGet m, GSerial (Rep a), Generic a) => m a #
Instances
Serial Bool # | |
Defined in Data.Bytes.Serial | |
Serial Char # | |
Defined in Data.Bytes.Serial | |
Serial Double # | |
Defined in Data.Bytes.Serial | |
Serial Float # | |
Defined in Data.Bytes.Serial | |
Serial Int # | |
Defined in Data.Bytes.Serial | |
Serial Int8 # | |
Defined in Data.Bytes.Serial | |
Serial Int16 # | |
Defined in Data.Bytes.Serial | |
Serial Int32 # | |
Defined in Data.Bytes.Serial | |
Serial Int64 # | |
Defined in Data.Bytes.Serial | |
Serial Integer # |
|
Defined in Data.Bytes.Serial | |
Serial Natural # |
|
Defined in Data.Bytes.Serial | |
Serial Ordering # |
|
Defined in Data.Bytes.Serial | |
Serial Word # | |
Defined in Data.Bytes.Serial | |
Serial Word8 # | |
Defined in Data.Bytes.Serial | |
Serial Word16 # | |
Defined in Data.Bytes.Serial | |
Serial Word32 # | |
Defined in Data.Bytes.Serial | |
Serial Word64 # | |
Defined in Data.Bytes.Serial | |
Serial () # | |
Defined in Data.Bytes.Serial | |
Serial Void # | |
Defined in Data.Bytes.Serial | |
Serial Version # | |
Defined in Data.Bytes.Serial | |
Serial All # | |
Defined in Data.Bytes.Serial | |
Serial Any # | |
Defined in Data.Bytes.Serial | |
Serial ByteString # | |
Defined in Data.Bytes.Serial serialize :: MonadPut m => ByteString -> m () # deserialize :: MonadGet m => m ByteString # | |
Serial ByteString # | |
Defined in Data.Bytes.Serial serialize :: MonadPut m => ByteString -> m () # deserialize :: MonadGet m => m ByteString # | |
Serial IntSet # | |
Defined in Data.Bytes.Serial | |
Serial Scientific # | |
Defined in Data.Bytes.Serial serialize :: MonadPut m => Scientific -> m () # deserialize :: MonadGet m => m Scientific # | |
Serial Text # | |
Defined in Data.Bytes.Serial | |
Serial Text # | |
Defined in Data.Bytes.Serial | |
Serial ZonedTime # | |
Defined in Data.Bytes.Serial | |
Serial LocalTime # | |
Defined in Data.Bytes.Serial | |
Serial TimeOfDay # | |
Defined in Data.Bytes.Serial | |
Serial TimeZone # | |
Defined in Data.Bytes.Serial | |
Serial UniversalTime # |
|
Defined in Data.Bytes.Serial serialize :: MonadPut m => UniversalTime -> m () # deserialize :: MonadGet m => m UniversalTime # | |
Serial UTCTime # |
|
Defined in Data.Bytes.Serial | |
Serial NominalDiffTime # |
|
Defined in Data.Bytes.Serial serialize :: MonadPut m => NominalDiffTime -> m () # deserialize :: MonadGet m => m NominalDiffTime # | |
Serial AbsoluteTime # |
|
Defined in Data.Bytes.Serial serialize :: MonadPut m => AbsoluteTime -> m () # deserialize :: MonadGet m => m AbsoluteTime # | |
Serial DiffTime # |
|
Defined in Data.Bytes.Serial | |
Serial Day # |
|
Defined in Data.Bytes.Serial | |
Serial a => Serial [a] # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Maybe a) # | |
Defined in Data.Bytes.Serial | |
(Serial a, Integral a) => Serial (Ratio a) # |
|
Defined in Data.Bytes.Serial | |
HasResolution a => Serial (Fixed a) # |
|
Defined in Data.Bytes.Serial | |
Serial a => Serial (ZipList a) # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Identity a) # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (First a) # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Last a) # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Dual a) # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Sum a) # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Product a) # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Down a) # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (NonEmpty a) # | |
Defined in Data.Bytes.Serial | |
Serial v => Serial (IntMap v) # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Seq a) # | |
Defined in Data.Bytes.Serial | |
(Serial a, Ord a) => Serial (Set a) # | |
Defined in Data.Bytes.Serial | |
(Serial v, Hashable v, Eq v) => Serial (HashSet v) # | |
Defined in Data.Bytes.Serial | |
(Bits n, Integral n, Bits (Unsigned n), Integral (Unsigned n)) => Serial (VarInt n) # | Integer/Word types serialized to base-128 variable-width ints.
|
Defined in Data.Bytes.Serial | |
(Serial a, Serial b) => Serial (Either a b) # | |
Defined in Data.Bytes.Serial | |
(Serial a, Serial b) => Serial (a, b) # | |
Defined in Data.Bytes.Serial | |
(Serial k, Serial v, Ord k) => Serial (Map k v) # | |
Defined in Data.Bytes.Serial | |
(Serial k, Serial v, Hashable k, Eq k) => Serial (HashMap k v) # | |
Defined in Data.Bytes.Serial | |
(Serial a, Serial b, Serial c) => Serial (a, b, c) # | |
Defined in Data.Bytes.Serial | |
Serial (f a) => Serial (Reverse f a) # | |
Defined in Data.Bytes.Serial | |
Serial a => Serial (Constant a b) # | |
Defined in Data.Bytes.Serial | |
(Serial a, Serial b, Serial c, Serial d) => Serial (a, b, c, d) # | |
Defined in Data.Bytes.Serial | |
(Serial (f a), Serial (g a)) => Serial (Product f g a) # | |
Defined in Data.Bytes.Serial | |
(Serial a, Serial b, Serial c, Serial d, Serial e) => Serial (a, b, c, d, e) # | |
Defined in Data.Bytes.Serial |
Specifying endianness
class SerialEndian a where #
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.
Nothing
serializeBE :: MonadPut m => a -> m () #
serializeBE :: (MonadPut m, GSerialEndian (Rep a), Generic a) => a -> m () #
deserializeBE :: MonadGet m => m a #
deserializeBE :: (MonadGet m, GSerialEndian (Rep a), Generic a) => m a #
serializeLE :: MonadPut m => a -> m () #
serializeLE :: (MonadPut m, GSerialEndian (Rep a), Generic a) => a -> m () #
deserializeLE :: MonadGet m => m a #
deserializeLE :: (MonadGet m, GSerialEndian (Rep a), Generic a) => m a #
serializeHost :: MonadPut m => a -> m () #
deserializeHost :: MonadGet m => m a #
Instances
Higher-order
These classes provide us with the ability to serialize containers that need polymorphic recursion.
Nothing
serializeWith :: MonadPut m => (a -> m ()) -> f a -> m () #
serializeWith :: (MonadPut m, GSerial1 (Rep1 f), Generic1 f) => (a -> m ()) -> f a -> m () #
deserializeWith :: MonadGet m => m a -> m (f a) #
deserializeWith :: (MonadGet m, GSerial1 (Rep1 f), Generic1 f) => m a -> m (f a) #
Instances
Serial1 [] # | |
Defined in Data.Bytes.Serial serializeWith :: MonadPut m => (a -> m ()) -> [a] -> m () # deserializeWith :: MonadGet m => m a -> m [a] # | |
Serial1 Maybe # | |
Defined in Data.Bytes.Serial serializeWith :: MonadPut m => (a -> m ()) -> Maybe a -> m () # deserializeWith :: MonadGet m => m a -> m (Maybe a) # | |
Serial1 NonEmpty # | |
Defined in Data.Bytes.Serial serializeWith :: MonadPut m => (a -> m ()) -> NonEmpty a -> m () # deserializeWith :: MonadGet m => m a -> m (NonEmpty a) # | |
Serial1 IntMap # | |
Defined in Data.Bytes.Serial serializeWith :: MonadPut m => (a -> m ()) -> IntMap a -> m () # deserializeWith :: MonadGet m => m a -> m (IntMap a) # | |
Serial1 Seq # | |
Defined in Data.Bytes.Serial serializeWith :: MonadPut m => (a -> m ()) -> Seq a -> m () # deserializeWith :: MonadGet m => m a -> m (Seq a) # | |
Serial a => Serial1 (Either a) # | |
Defined in Data.Bytes.Serial serializeWith :: MonadPut m => (a0 -> m ()) -> Either a a0 -> m () # deserializeWith :: MonadGet m => m a0 -> m (Either a a0) # | |
Serial a => Serial1 ((,) a) # | |
Defined in Data.Bytes.Serial serializeWith :: MonadPut m => (a0 -> m ()) -> (a, a0) -> m () # deserializeWith :: MonadGet m => m a0 -> m (a, a0) # | |
(Ord k, Serial k) => Serial1 (Map k) # | |
Defined in Data.Bytes.Serial serializeWith :: MonadPut m => (a -> m ()) -> Map k a -> m () # deserializeWith :: MonadGet m => m a -> m (Map k a) # | |
(Hashable k, Eq k, Serial k) => Serial1 (HashMap k) # | |
Defined in Data.Bytes.Serial serializeWith :: MonadPut m => (a -> m ()) -> HashMap k a -> m () # deserializeWith :: MonadGet m => m a -> m (HashMap k a) # | |
(Serial a, Serial b) => Serial1 ((,,) a b) # | |
Defined in Data.Bytes.Serial serializeWith :: MonadPut m => (a0 -> m ()) -> (a, b, a0) -> m () # deserializeWith :: MonadGet m => m a0 -> m (a, b, a0) # | |
(Serial a, Serial b, Serial c) => Serial1 ((,,,) a b c) # | |
Defined in Data.Bytes.Serial serializeWith :: MonadPut m => (a0 -> m ()) -> (a, b, c, a0) -> m () # deserializeWith :: MonadGet m => m a0 -> m (a, b, c, a0) # | |
(Serial a, Serial b, Serial c, Serial d) => Serial1 ((,,,,) a b c d) # | |
Defined in Data.Bytes.Serial serializeWith :: MonadPut m => (a0 -> m ()) -> (a, b, c, d, a0) -> m () # deserializeWith :: MonadGet m => m a0 -> m (a, b, c, d, a0) # |
serialize1 :: (MonadPut m, Serial1 f, Serial a) => f a -> m () #
deserialize1 :: (MonadGet m, Serial1 f, Serial a) => m (f a) #
serializeWith2 :: MonadPut m => (a -> m ()) -> (b -> m ()) -> f a b -> m () #
deserializeWith2 :: MonadGet m => m a -> m b -> m (f a b) #
Instances
Serial2 Either # | |
Defined in Data.Bytes.Serial serializeWith2 :: MonadPut m => (a -> m ()) -> (b -> m ()) -> Either a b -> m () # deserializeWith2 :: MonadGet m => m a -> m b -> m (Either a b) # | |
Serial2 (,) # | |
Defined in Data.Bytes.Serial serializeWith2 :: MonadPut m => (a -> m ()) -> (b -> m ()) -> (a, b) -> m () # deserializeWith2 :: MonadGet m => m a -> m b -> m (a, b) # | |
Serial a => Serial2 ((,,) a) # | |
Defined in Data.Bytes.Serial serializeWith2 :: MonadPut m => (a0 -> m ()) -> (b -> m ()) -> (a, a0, b) -> m () # deserializeWith2 :: MonadGet m => m a0 -> m b -> m (a, a0, b) # | |
(Serial a, Serial b) => Serial2 ((,,,) a b) # | |
Defined in Data.Bytes.Serial serializeWith2 :: MonadPut m => (a0 -> m ()) -> (b0 -> m ()) -> (a, b, a0, b0) -> m () # deserializeWith2 :: MonadGet m => m a0 -> m b0 -> m (a, b, a0, b0) # | |
(Serial a, Serial b, Serial c) => Serial2 ((,,,,) a b c) # | |
Defined in Data.Bytes.Serial serializeWith2 :: MonadPut m => (a0 -> m ()) -> (b0 -> m ()) -> (a, b, c, a0, b0) -> m () # deserializeWith2 :: MonadGet m => m a0 -> m b0 -> m (a, b, c, a0, b0) # |
Storable
restore :: forall m a. (MonadGet m, Storable a) => m a #
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
Used internally to provide generic serialization
gserialize :: MonadPut m => f a -> m () #
gdeserialize :: MonadGet m => m (f a) #
Instances
GSerial (V1 :: Type -> Type) # | |
Defined in Data.Bytes.Serial gserialize :: MonadPut m => V1 a -> m () # gdeserialize :: MonadGet m => m (V1 a) # | |
GSerial (U1 :: Type -> Type) # | |
Defined in Data.Bytes.Serial gserialize :: MonadPut m => U1 a -> m () # gdeserialize :: MonadGet m => m (U1 a) # | |
Serial a => GSerial (K1 i a :: Type -> Type) # | |
Defined in Data.Bytes.Serial gserialize :: MonadPut m => K1 i a a0 -> m () # gdeserialize :: MonadGet m => m (K1 i a a0) # | |
(GSerial f, GSerial g) => GSerial (f :+: g) # | |
Defined in Data.Bytes.Serial gserialize :: MonadPut m => (f :+: g) a -> m () # gdeserialize :: MonadGet m => m ((f :+: g) a) # | |
(GSerial f, GSerial g) => GSerial (f :*: g) # | |
Defined in Data.Bytes.Serial gserialize :: MonadPut m => (f :*: g) a -> m () # gdeserialize :: MonadGet m => m ((f :*: g) a) # | |
GSerial f => GSerial (M1 i c f) # | |
Defined in Data.Bytes.Serial gserialize :: MonadPut m => M1 i c f a -> m () # gdeserialize :: MonadGet m => m (M1 i c f a) # |
class GSerialEndian f where #
Used internally to provide generic big-endian serialization
Nothing
gserializeBE :: MonadPut m => f a -> m () #
gserializeBE :: (MonadPut m, GSerial f) => f a -> m () #
gdeserializeBE :: MonadGet m => m (f a) #
gdeserializeBE :: (MonadGet m, GSerial f) => m (f a) #
gserializeLE :: MonadPut m => f a -> m () #
gserializeLE :: (MonadPut m, GSerial f) => f a -> m () #
gdeserializeLE :: MonadGet m => m (f a) #
gdeserializeLE :: (MonadGet m, GSerial f) => m (f a) #
Instances
SerialEndian a => GSerialEndian (K1 i a :: Type -> Type) # | |
Defined in Data.Bytes.Serial gserializeBE :: MonadPut m => K1 i a a0 -> m () # gdeserializeBE :: MonadGet m => m (K1 i a a0) # gserializeLE :: MonadPut m => K1 i a a0 -> m () # gdeserializeLE :: MonadGet m => m (K1 i a a0) # |
Used internally to provide generic serialization
gserializeWith :: MonadPut m => (a -> m ()) -> f a -> m () #
gdeserializeWith :: MonadGet m => m a -> m (f a) #
Instances
GSerial1 Par1 # | |
Defined in Data.Bytes.Serial gserializeWith :: MonadPut m => (a -> m ()) -> Par1 a -> m () # gdeserializeWith :: MonadGet m => m a -> m (Par1 a) # | |
GSerial1 (V1 :: Type -> Type) # | |
Defined in Data.Bytes.Serial gserializeWith :: MonadPut m => (a -> m ()) -> V1 a -> m () # gdeserializeWith :: MonadGet m => m a -> m (V1 a) # | |
GSerial1 (U1 :: Type -> Type) # | |
Defined in Data.Bytes.Serial gserializeWith :: MonadPut m => (a -> m ()) -> U1 a -> m () # gdeserializeWith :: MonadGet m => m a -> m (U1 a) # | |
Serial1 f => GSerial1 (Rec1 f) # | |
Defined in Data.Bytes.Serial gserializeWith :: MonadPut m => (a -> m ()) -> Rec1 f a -> m () # gdeserializeWith :: MonadGet m => m a -> m (Rec1 f a) # | |
Serial a => GSerial1 (K1 i a :: Type -> Type) # | |
Defined in Data.Bytes.Serial gserializeWith :: MonadPut m => (a0 -> m ()) -> K1 i a a0 -> m () # gdeserializeWith :: MonadGet m => m a0 -> m (K1 i a a0) # | |
(GSerial1 f, GSerial1 g) => GSerial1 (f :+: g) # | |
Defined in Data.Bytes.Serial gserializeWith :: MonadPut m => (a -> m ()) -> (f :+: g) a -> m () # gdeserializeWith :: MonadGet m => m a -> m ((f :+: g) a) # | |
(GSerial1 f, GSerial1 g) => GSerial1 (f :*: g) # | |
Defined in Data.Bytes.Serial gserializeWith :: MonadPut m => (a -> m ()) -> (f :*: g) a -> m () # gdeserializeWith :: MonadGet m => m a -> m ((f :*: g) a) # | |
GSerial1 f => GSerial1 (M1 i c f) # | |
Defined in Data.Bytes.Serial gserializeWith :: MonadPut m => (a -> m ()) -> M1 i c f a -> m () # gdeserializeWith :: MonadGet m => m a -> m (M1 i c f a) # | |
(Serial1 f, GSerial1 g) => GSerial1 (f :.: g) # | |
Defined in Data.Bytes.Serial gserializeWith :: MonadPut m => (a -> m ()) -> (f :.: g) a -> m () # gdeserializeWith :: MonadGet m => m a -> m ((f :.: g) a) # |