-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Principled and efficient bit-oriented binary serialization. -- -- See the online tutorial. @package flat @version 0.2.2 module Data.ZigZag zzEncode :: (Num b, Integral a, FiniteBits a) => a -> b zzEncodeInteger :: Integer -> Integer zzDecode8 :: Word8 -> Int8 zzDecode16 :: Word16 -> Int16 zzDecode32 :: Word32 -> Int32 zzDecode64 :: Word64 -> Int64 zzDecodeInteger :: Integer -> Integer zzDecode :: (Num a, Integral a1, Bits a1) => a1 -> a -- | Primitives to convert between FloatDouble and Word32Word64 | -- This code was copied from binary | This module was written -- based on -- http://hackage.haskell.org/package/reinterpret-cast-0.1.0/docs/src/Data-ReinterpretCast-Internal-ImplArray.html. -- -- Implements casting via a 1-element STUArray, as described in -- http://stackoverflow.com/a/7002812/263061. module Data.FloatCast -- | Reinterpret-casts a Float to a Word32. floatToWord :: Float -> Word32 -- | Reinterpret-casts a Word32 to a Float. wordToFloat :: Word32 -> Float -- | Reinterpret-casts a Double to a Word64. doubleToWord :: Double -> Word64 -- | Reinterpret-casts a Word64 to a Double. wordToDouble :: Word64 -> Double -- | Common Types module Data.Flat.Types -- | Number of bits type NumBits = Int -- | Type representing arbitrary-precision non-negative integers. -- -- Operations whose result would be negative throw -- (Underflow :: ArithException). data Natural :: * -- | A compact representation of a Word8 vector. -- -- It has a lower memory overhead than a ByteString and and does -- not contribute to heap fragmentation. It can be converted to or from a -- ByteString (at the cost of copying the string data). It -- supports very few other operations. -- -- It is suitable for use as an internal representation for code that -- needs to keep many short strings in memory, but it should not -- be used as an interchange type. That is, it should not generally be -- used in public APIs. The ByteString type is usually more -- suitable for use in interfaces; it is more flexible and it supports a -- wide range of operations. data ShortByteString :: * -- | A space efficient, packed, unboxed Unicode text type. data Text :: * -- | A wrapper to encode/decode Text as UTF8 (slower but more compact) newtype UTF8Text UTF8Text :: Text -> UTF8Text -- | A wrapper to encode/decode Text as UTF16 (faster but bigger) newtype UTF16Text UTF16Text :: Text -> UTF16Text instance GHC.Show.Show Data.Flat.Types.UTF16Text instance GHC.Classes.Ord Data.Flat.Types.UTF16Text instance GHC.Classes.Eq Data.Flat.Types.UTF16Text instance GHC.Show.Show Data.Flat.Types.UTF8Text instance GHC.Classes.Ord Data.Flat.Types.UTF8Text instance GHC.Classes.Eq Data.Flat.Types.UTF8Text -- | Memory access primitives module Data.Flat.Memory chunksToByteString :: (Ptr Word8, [Int]) -> ByteString chunksToByteArray :: (Ptr Word8, [Int]) -> (ByteArray, Int) -- | Byte arrays data ByteArray :: * ByteArray :: ByteArray# -> ByteArray pokeByteArray :: ByteArray# -> Int -> Int -> Ptr Word8 -> IO (Ptr Word8) -- | Copy bytestring to given pointer, returns new pointer pokeByteString :: ByteString -> Ptr Word8 -> IO (Ptr Word8) unsafeCreateUptoN' :: Int -> (Ptr Word8 -> IO (Int, a)) -> (ByteString, a) -- | Computes the offset required to get from the second to the first -- argument. We have -- --
--   p2 == p1 `plusPtr` (p2 `minusPtr` p1)
--   
minusPtr :: Ptr a -> Ptr b -> Int -- | Encoder Types module Data.Flat.Encoder.Types -- | Calculate the size (in bits) of the encoding of a value type Size a = a -> NumBits -> NumBits -- | Number of bits type NumBits = Int -- | A basic encoder type Prim = S -> IO S -- | Strict encoder state data S S :: {-# UNPACK #-} !(Ptr Word8) -> {-# UNPACK #-} !Word8 -> {-# UNPACK #-} !NumBits -> S [nextPtr] :: S -> {-# UNPACK #-} !(Ptr Word8) [currByte] :: S -> {-# UNPACK #-} !Word8 [usedBits] :: S -> {-# UNPACK #-} !NumBits instance GHC.Show.Show Data.Flat.Encoder.Types.S -- | Encoding Primitives module Data.Flat.Encoder.Prim -- | Encode up to 8 bits. eBitsF :: NumBits -> Word8 -> Prim eFloatF :: Float -> Prim eDoubleF :: Double -> Prim eUTF16F :: Text -> Prim eUTF8F :: Text -> Prim eCharF :: Char -> Prim eNaturalF :: Natural -> Prim eIntegerF :: Integer -> Prim eInt64F :: Int64 -> Prim eInt32F :: Int32 -> Prim eIntF :: Int -> Prim eInt16F :: Int16 -> Prim eInt8F :: Int8 -> Prim eWordF :: Word -> Prim eWord64F :: Word64 -> Prim eWord32F :: Word32 -> Prim eWord16F :: Word16 -> Prim eBytesF :: ByteString -> Prim eLazyBytesF :: ByteString -> Prim eShortBytesF :: ShortByteString -> Prim eWord8F :: Word8 -> Prim eFillerF :: Prim eBoolF :: Bool -> Prim eTrueF :: Prim eFalseF :: Prim varWordF :: (Bits t, Integral t) => t -> Prim w7l :: (Bits t, Integral t) => t -> [Word8] -- | Primitives to calculate the encoding size of a value module Data.Flat.Encoder.Size sFillerMax :: NumBits sBool :: NumBits sWord8 :: NumBits sInt8 :: NumBits sFloat :: NumBits sDouble :: NumBits sChar :: Char -> NumBits sCharMax :: NumBits sWord :: Word -> NumBits sInt :: Int -> NumBits sInt16 :: Int16 -> NumBits sInt32 :: Int32 -> NumBits sInt64 :: Int64 -> NumBits sWord16 :: Word16 -> NumBits sWord32 :: Word32 -> NumBits sWord64 :: Word64 -> NumBits sInteger :: Integer -> NumBits sNatural :: Natural -> NumBits sIntegral :: (Bits t, Integral t) => t -> Int sUTF8Max :: Text -> NumBits sUTF16 :: Text -> NumBits sBytes :: ByteString -> NumBits sLazyBytes :: ByteString -> NumBits sShortBytes :: ShortByteString -> NumBits textBytes :: Text -> Int bitsToBytes :: Int -> Int numBlks :: Integral t => t -> t -> t arrayBits :: Int -> NumBits arrayChunks :: Int -> NumBits blobBits :: Int -> NumBits blkBitsBS :: ByteString -> NumBits blksBits :: Int -> NumBits -- | Strict encoder module Data.Flat.Encoder.Strict -- | Strict encoder strictEncoder :: NumBits -> Encoding -> ByteString newtype Encoding Encoding :: Prim -> Encoding [run] :: Encoding -> Prim encodersS :: [Encoding] -> Encoding -- | Encode as a List encodeListWith :: (t -> Encoding) -> [t] -> Encoding -- | Encode as Array encodeArrayWith :: (t -> Encoding) -> [t] -> Encoding eChar :: Char -> Encoding eUTF16 :: Text -> Encoding eUTF8 :: Text -> Encoding eBytes :: ByteString -> Encoding eLazyBytes :: ByteString -> Encoding eShortBytes :: ShortByteString -> Encoding eNatural :: Natural -> Encoding eFloat :: Float -> Encoding eDouble :: Double -> Encoding eInteger :: Integer -> Encoding eInt64 :: Int64 -> Encoding eInt32 :: Int32 -> Encoding eInt16 :: Int16 -> Encoding eInt8 :: Int8 -> Encoding eInt :: Int -> Encoding eWord64 :: Word64 -> Encoding eWord32 :: Word32 -> Encoding eWord16 :: Word16 -> Encoding eWord8 :: Word8 -> Encoding eWord :: Word -> Encoding eBits :: NumBits -> Word8 -> Encoding eFiller :: Encoding eBool :: Bool -> Encoding eTrue :: Encoding eFalse :: Encoding vsize :: (t -> NumBits) -> t -> NumBits -> NumBits csize :: NumBits -> t -> NumBits -> NumBits sChar :: Size Char sInt64 :: Size Int64 sInt32 :: Size Int32 sInt16 :: Size Int16 sInt8 :: Size Int8 sInt :: Size Int sWord64 :: Size Word64 sWord32 :: Size Word32 sWord16 :: Size Word16 sWord8 :: Size Word8 sWord :: Size Word sFloat :: Size Float sDouble :: Size Double sBytes :: Size ByteString sLazyBytes :: Size ByteString sShortBytes :: Size ShortByteString sNatural :: Size Natural sInteger :: Size Integer sUTF8Max :: Size Text sUTF16 :: Size Text sFillerMax :: Size a sBool :: Size Bool instance GHC.Show.Show Data.Flat.Encoder.Strict.Encoding instance GHC.Base.Monoid Data.Flat.Encoder.Strict.Encoding module Data.Flat.Encoder data Encoding -- | An infix synonym for mappend. (<>) :: Monoid m => m -> m -> m infixr 6 <> -- | Number of bits type NumBits = Int encodersS :: [Encoding] -> Encoding -- | Identity of mappend mempty :: Monoid a => a -- | Strict encoder strictEncoder :: NumBits -> Encoding -> ByteString eTrueF :: Prim eFalseF :: Prim eFloat :: Float -> Encoding eDouble :: Double -> Encoding eInteger :: Integer -> Encoding eNatural :: Natural -> Encoding eWord16 :: Word16 -> Encoding eWord32 :: Word32 -> Encoding eWord64 :: Word64 -> Encoding eWord8 :: Word8 -> Encoding eBits :: NumBits -> Word8 -> Encoding eFiller :: Encoding eBool :: Bool -> Encoding eTrue :: Encoding eFalse :: Encoding eBytes :: ByteString -> Encoding eUTF16 :: Text -> Encoding eLazyBytes :: ByteString -> Encoding eShortBytes :: ShortByteString -> Encoding eInt :: Int -> Encoding eInt8 :: Int8 -> Encoding eInt16 :: Int16 -> Encoding eInt32 :: Int32 -> Encoding eInt64 :: Int64 -> Encoding eWord :: Word -> Encoding eChar :: Char -> Encoding -- | Encode as Array encodeArrayWith :: (t -> Encoding) -> [t] -> Encoding -- | Encode as a List encodeListWith :: (t -> Encoding) -> [t] -> Encoding -- | Calculate the size (in bits) of the encoding of a value type Size a = a -> NumBits -> NumBits arrayBits :: Int -> NumBits sWord :: Size Word sWord8 :: Size Word8 sWord16 :: Size Word16 sWord32 :: Size Word32 sWord64 :: Size Word64 sInt :: Size Int sInt8 :: Size Int8 sInt16 :: Size Int16 sInt32 :: Size Int32 sInt64 :: Size Int64 sNatural :: Size Natural sInteger :: Size Integer sFloat :: Size Float sDouble :: Size Double sChar :: Size Char sBytes :: Size ByteString sLazyBytes :: Size ByteString sShortBytes :: Size ShortByteString sUTF16 :: Size Text sFillerMax :: Size a sBool :: Size Bool sUTF8Max :: Size Text eUTF8 :: Text -> Encoding -- | Strict Decoder Types module Data.Flat.Decoder.Types strictDecoder :: Get a -> ByteString -> Either DecodeException a strictDecoderPart :: Get a -> ByteString -> Either DecodeException a -- | Decoder monad newtype Get a Get :: (Ptr Word8 -> S -> IO (GetResult a)) -> Get a [runGet] :: Get a -> Ptr Word8 -> S -> IO (GetResult a) -- | Decoder state data S S :: {-# UNPACK #-} !(Ptr Word8) -> {-# UNPACK #-} !Int -> S [currPtr] :: S -> {-# UNPACK #-} !(Ptr Word8) [usedBits] :: S -> {-# UNPACK #-} !Int data GetResult a GetResult :: {-# UNPACK #-} !S -> !a -> GetResult a -- | A decoded value type Decoded a = Either DecodeException a -- | An exception during decoding data DecodeException notEnoughSpace :: Ptr Word8 -> S -> IO a tooMuchSpace :: Ptr Word8 -> S -> IO a badEncoding :: Ptr Word8 -> S -> IO a instance GHC.Classes.Ord Data.Flat.Decoder.Types.DecodeException instance GHC.Classes.Eq Data.Flat.Decoder.Types.DecodeException instance GHC.Show.Show Data.Flat.Decoder.Types.DecodeException instance GHC.Base.Functor Data.Flat.Decoder.Types.Get instance GHC.Base.Functor Data.Flat.Decoder.Types.GetResult instance GHC.Classes.Ord Data.Flat.Decoder.Types.S instance GHC.Classes.Eq Data.Flat.Decoder.Types.S instance GHC.Show.Show Data.Flat.Decoder.Types.S instance Control.DeepSeq.NFData (Data.Flat.Decoder.Types.Get a) instance GHC.Show.Show (Data.Flat.Decoder.Types.Get a) instance GHC.Base.Applicative Data.Flat.Decoder.Types.Get instance GHC.Base.Monad Data.Flat.Decoder.Types.Get instance GHC.Exception.Exception Data.Flat.Decoder.Types.DecodeException -- | Strict Decoder Primitives module Data.Flat.Decoder.Prim dBool :: Get Bool dWord8 :: Get Word8 dFloat :: Get Float dDouble :: Get Double getChunksInfo :: Get (Ptr Word8, [Int]) dByteString_ :: Get ByteString dLazyByteString_ :: Get ByteString dByteArray_ :: Get (ByteArray, Int) -- | Strict Decoder module Data.Flat.Decoder.Strict decodeArrayWith :: Get a -> Get [a] decodeListWith :: Get a -> Get [a] dByteString :: Get ByteString dLazyByteString :: Get ByteString dShortByteString :: Get ShortByteString dShortByteString_ :: Get ShortByteString dUTF16 :: Get Text dUTF8 :: Get Text dInteger :: Get Integer dNatural :: Get Natural dChar :: Get Char dWord8 :: Get Word8 dWord16 :: Get Word16 dWord32 :: Get Word32 dWord64 :: Get Word64 dWord :: Get Word dInt8 :: Get Int8 dInt16 :: Get Int16 dInt32 :: Get Int32 dInt64 :: Get Int64 dInt :: Get Int -- | Strict Decoder module Data.Flat.Decoder strictDecoder :: Get a -> ByteString -> Either DecodeException a strictDecoderPart :: Get a -> ByteString -> Either DecodeException a -- | A decoded value type Decoded a = Either DecodeException a -- | An exception during decoding data DecodeException -- | Decoder monad data Get a dByteString :: Get ByteString dLazyByteString :: Get ByteString dShortByteString :: Get ShortByteString dShortByteString_ :: Get ShortByteString dUTF16 :: Get Text dUTF8 :: Get Text decodeArrayWith :: Get a -> Get [a] decodeListWith :: Get a -> Get [a] dFloat :: Get Float dDouble :: Get Double dInteger :: Get Integer dNatural :: Get Natural dChar :: Get Char dBool :: Get Bool dWord8 :: Get Word8 dWord16 :: Get Word16 dWord32 :: Get Word32 dWord64 :: Get Word64 dWord :: Get Word dInt8 :: Get Int8 dInt16 :: Get Int16 dInt32 :: Get Int32 dInt64 :: Get Int64 dInt :: Get Int -- | Generics-based generation of Flat instances module Data.Flat.Class -- | Class of types that can be encoded/decoded class Flat a where encode = genericEncode decode = genericDecode size = genericSize encode :: Flat a => a -> Encoding encode :: (Flat a, Generic a, GEncode (Rep a)) => a -> Encoding decode :: Flat a => Get a decode :: (Flat a, Generic a, GDecode (Rep a)) => Get a size :: Flat a => a -> NumBits -> NumBits size :: (Flat a, Generic a, GSize (Rep a)) => a -> NumBits -> NumBits -- | Calculate the size in bits of the serialisation of the value getSize :: Flat a => a -> NumBits instance Data.Flat.Class.GEncode a => Data.Flat.Class.GEncode (GHC.Generics.M1 i c a) instance Data.Flat.Class.GEncoders a => Data.Flat.Class.GEncode (GHC.Generics.D1 i (GHC.Generics.C1 c a)) instance Data.Flat.Class.GEncode GHC.Generics.V1 instance Data.Flat.Class.GEncode GHC.Generics.U1 instance Data.Flat.Class.GEncode (a GHC.Generics.:*: b) instance Data.Flat.Class.Flat a => Data.Flat.Class.GEncode (GHC.Generics.K1 i a) instance (Data.Flat.Class.NumConstructors (a GHC.Generics.:+: b) GHC.TypeLits.<= 255, Data.Flat.Class.GEncodeSum 0 0 (a GHC.Generics.:+: b)) => Data.Flat.Class.GEncode (a GHC.Generics.:+: b) instance Data.Flat.Class.GEncoders a => Data.Flat.Class.GEncoders (GHC.Generics.M1 i c a) instance Data.Flat.Class.GEncoders a => Data.Flat.Class.GEncoders (GHC.Generics.D1 i (GHC.Generics.C1 c a)) instance Data.Flat.Class.GEncoders GHC.Generics.V1 instance Data.Flat.Class.GEncoders GHC.Generics.U1 instance Data.Flat.Class.Flat a => Data.Flat.Class.GEncoders (GHC.Generics.K1 i a) instance (Data.Flat.Class.GEncoders a, Data.Flat.Class.GEncoders b) => Data.Flat.Class.GEncoders (a GHC.Generics.:*: b) instance (Data.Flat.Class.GEncodeSum (n GHC.TypeLits.+ 1) (m GHC.TypeLits.* 2) a, Data.Flat.Class.GEncodeSum (n GHC.TypeLits.+ 1) ((m GHC.TypeLits.* 2) GHC.TypeLits.+ 1) b, GHC.TypeLits.KnownNat n, GHC.TypeLits.KnownNat m) => Data.Flat.Class.GEncodeSum n m (a GHC.Generics.:+: b) instance (Data.Flat.Class.GEncoders a, GHC.TypeLits.KnownNat n, GHC.TypeLits.KnownNat m) => Data.Flat.Class.GEncodeSum n m (GHC.Generics.C1 c a) instance Data.Flat.Class.GDecode a => Data.Flat.Class.GDecode (GHC.Generics.M1 i c a) instance Data.Flat.Class.GDecode GHC.Generics.V1 instance Data.Flat.Class.GDecode GHC.Generics.U1 instance (Data.Flat.Class.GDecode a, Data.Flat.Class.GDecode b) => Data.Flat.Class.GDecode (a GHC.Generics.:*: b) instance Data.Flat.Class.Flat a => Data.Flat.Class.GDecode (GHC.Generics.K1 i a) instance (Data.Flat.Class.GDecode a, Data.Flat.Class.GDecode b) => Data.Flat.Class.GDecode (a GHC.Generics.:+: b) instance Data.Flat.Class.GSize f => Data.Flat.Class.GSize (GHC.Generics.M1 i c f) instance Data.Flat.Class.GSize GHC.Generics.V1 instance Data.Flat.Class.GSize GHC.Generics.U1 instance Data.Flat.Class.Flat a => Data.Flat.Class.GSize (GHC.Generics.K1 i a) instance (Data.Flat.Class.GSize a, Data.Flat.Class.GSize b) => Data.Flat.Class.GSize (a GHC.Generics.:*: b) instance (Data.Flat.Class.NumConstructors (a GHC.Generics.:+: b) GHC.TypeLits.<= 255, Data.Flat.Class.GSizeSum 0 (a GHC.Generics.:+: b)) => Data.Flat.Class.GSize (a GHC.Generics.:+: b) instance (Data.Flat.Class.GSizeSum (n GHC.TypeLits.+ 1) a, Data.Flat.Class.GSizeSum (n GHC.TypeLits.+ 1) b, GHC.TypeLits.KnownNat n) => Data.Flat.Class.GSizeSum n (a GHC.Generics.:+: b) instance (Data.Flat.Class.GSize a, GHC.TypeLits.KnownNat n) => Data.Flat.Class.GSizeSum n (GHC.Generics.C1 c a) -- | Pre-value and post-value byte alignments module Data.Flat.Filler -- | A meaningless sequence of 0 bits terminated with a 1 bit (easier to -- implement than the reverse) Useful to align an encoded value at -- byte/word boundaries. data Filler FillerBit :: Filler -> Filler FillerEnd :: Filler -- | Length of a filler in bits fillerLength :: Num a => Filler -> a -- | A Pre aligned value, a value preceded by a filler data PreAligned a PreAligned :: Filler -> a -> PreAligned a [preFiller] :: PreAligned a -> Filler [preValue] :: PreAligned a -> a -- | Pre align a value preAligned :: a -> PreAligned a -- | A Post aligned value, a value followed by a filler data PostAligned a PostAligned :: a -> Filler -> PostAligned a [postValue] :: PostAligned a -> a [postFiller] :: PostAligned a -> Filler -- | Post align a value postAligned :: a -> PostAligned a postAlignedDecoder :: Get a -> Get (PostAligned a) instance Data.Flat.Class.Flat a => Data.Flat.Class.Flat (Data.Flat.Filler.PreAligned a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Data.Flat.Filler.PreAligned a) instance GHC.Generics.Generic (Data.Flat.Filler.PreAligned a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Flat.Filler.PreAligned a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Flat.Filler.PreAligned a) instance GHC.Show.Show a => GHC.Show.Show (Data.Flat.Filler.PreAligned a) instance Data.Flat.Class.Flat a => Data.Flat.Class.Flat (Data.Flat.Filler.PostAligned a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Data.Flat.Filler.PostAligned a) instance GHC.Generics.Generic (Data.Flat.Filler.PostAligned a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Flat.Filler.PostAligned a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Flat.Filler.PostAligned a) instance GHC.Show.Show a => GHC.Show.Show (Data.Flat.Filler.PostAligned a) instance Control.DeepSeq.NFData Data.Flat.Filler.Filler instance GHC.Generics.Generic Data.Flat.Filler.Filler instance GHC.Classes.Ord Data.Flat.Filler.Filler instance GHC.Classes.Eq Data.Flat.Filler.Filler instance GHC.Show.Show Data.Flat.Filler.Filler instance Data.Flat.Class.Flat Data.Flat.Filler.Filler -- | Flat Instances for common, primitive and abstract data types for which -- instances cannot be automatically derived module Data.Flat.Instances -- | Calculate size of an instance of IsMap sizeMap :: (Flat (ContainerKey r), Flat (MapValue r), IsMap r) => Size r -- | Encode an instance of IsMap, as a list encodeMap :: (Flat (ContainerKey map), Flat (MapValue map), IsMap map) => map -> Encoding -- | Decode an instance of IsMap, as a list decodeMap :: (Flat (ContainerKey map), Flat (MapValue map), IsMap map) => Get map -- | Calculate size of an instance of IsSequence sizeSequence :: (IsSequence mono, Flat (Element mono)) => mono -> NumBits -> NumBits -- | Encode an instance of IsSequence, as an array encodeSequence :: (Flat (Element mono), IsSequence mono) => mono -> Encoding -- | Decode an instance of IsSequence, as an array decodeSequence :: (Flat (Element b), IsSequence b) => Get b instance Data.Flat.Class.Flat () instance Data.Flat.Class.Flat GHC.Types.Bool instance Data.Flat.Class.Flat a => Data.Flat.Class.Flat (GHC.Base.Maybe a) instance (Data.Flat.Class.Flat a, Data.Flat.Class.Flat b) => Data.Flat.Class.Flat (Data.Either.Either a b) instance (Data.Flat.Class.Flat a, Data.Flat.Class.Flat b) => Data.Flat.Class.Flat (a, b) instance (Data.Flat.Class.Flat a, Data.Flat.Class.Flat b, Data.Flat.Class.Flat c) => Data.Flat.Class.Flat (a, b, c) instance (Data.Flat.Class.Flat a, Data.Flat.Class.Flat b, Data.Flat.Class.Flat c, Data.Flat.Class.Flat d) => Data.Flat.Class.Flat (a, b, c, d) instance (Data.Flat.Class.Flat a, Data.Flat.Class.Flat b, Data.Flat.Class.Flat c, Data.Flat.Class.Flat d, Data.Flat.Class.Flat e) => Data.Flat.Class.Flat (a, b, c, d, e) instance (Data.Flat.Class.Flat a, Data.Flat.Class.Flat b, Data.Flat.Class.Flat c, Data.Flat.Class.Flat d, Data.Flat.Class.Flat e, Data.Flat.Class.Flat f) => Data.Flat.Class.Flat (a, b, c, d, e, f) instance (Data.Flat.Class.Flat a, Data.Flat.Class.Flat b, Data.Flat.Class.Flat c, Data.Flat.Class.Flat d, Data.Flat.Class.Flat e, Data.Flat.Class.Flat f, Data.Flat.Class.Flat g) => Data.Flat.Class.Flat (a, b, c, d, e, f, g) instance Data.Flat.Class.Flat a => Data.Flat.Class.Flat [a] instance Data.Flat.Class.Flat [GHC.Types.Char] instance Data.Flat.Class.Flat Data.ByteString.Internal.ByteString instance Data.Flat.Class.Flat Data.ByteString.Lazy.Internal.ByteString instance Data.Flat.Class.Flat Data.ByteString.Short.Internal.ShortByteString instance Data.Flat.Class.Flat Data.Text.Internal.Text instance Data.Flat.Class.Flat Data.Flat.Types.UTF8Text instance Data.Flat.Class.Flat Data.Flat.Types.UTF16Text instance Data.Flat.Class.Flat GHC.Word.Word8 instance Data.Flat.Class.Flat GHC.Word.Word16 instance Data.Flat.Class.Flat GHC.Word.Word32 instance Data.Flat.Class.Flat GHC.Word.Word64 instance Data.Flat.Class.Flat GHC.Types.Word instance Data.Flat.Class.Flat GHC.Int.Int8 instance Data.Flat.Class.Flat GHC.Int.Int16 instance Data.Flat.Class.Flat GHC.Int.Int32 instance Data.Flat.Class.Flat GHC.Int.Int64 instance Data.Flat.Class.Flat GHC.Types.Int instance Data.Flat.Class.Flat GHC.Integer.Type.Integer instance Data.Flat.Class.Flat GHC.Natural.Natural instance Data.Flat.Class.Flat GHC.Types.Float instance Data.Flat.Class.Flat GHC.Types.Double instance Data.Flat.Class.Flat GHC.Types.Char instance (Data.Flat.Class.Flat a, Data.Flat.Class.Flat b, GHC.Classes.Ord a) => Data.Flat.Class.Flat (Data.Map.Base.Map a b) instance Data.Flat.Class.Flat a => Data.Flat.Class.Flat (Data.Sequence.Seq a) -- | Encoding and decoding functions module Data.Flat.Run -- | Encode padded value. flat :: (FlatRaw (PostAligned a) c, Flat a) => a -> c -- | Strictly encode padded value. flatStrict :: Flat a => a -> ByteString -- | Decode padded value. unflat :: (FlatRaw (PostAligned a) b, Flat a) => b -> Decoded a unflatStrict :: Flat a => ByteString -> Decoded a -- | Decode padded value, using the provided decoder. unflatWith :: FlatRaw (PostAligned a) b => Get (PostAligned a) -> b -> Decoded a -- | Decode (unpadded) value. unflatRaw :: (FlatRaw a b, Flat a) => b -> Decoded a instance Data.Flat.Class.Flat a => Data.Flat.Run.FlatRaw a Data.ByteString.Internal.ByteString instance Data.Flat.Class.Flat a => Data.Flat.Run.FlatRaw a Data.ByteString.Lazy.Internal.ByteString -- | Utilities to represent and display bit sequences module Data.Flat.Bits -- | A sequence of bits type Bits = Vector Bool toBools :: Bits -> [Bool] -- | The sequence of bits corresponding to the serialization of the passed -- value (without any final byte padding) bits :: forall a. Flat a => a -> Bits -- | The sequence of bits corresponding to the byte-padded serialization of -- the passed value paddedBits :: forall a. Flat a => a -> Bits -- | Convert a sequence of bits to the corresponding list of bytes asBytes :: Bits -> [Word8] instance Text.PrettyPrint.HughesPJClass.Pretty Data.Flat.Bits.Bits module Data.Flat -- | A wrapper to encode/decode Text as UTF8 (slower but more compact) newtype UTF8Text UTF8Text :: Text -> UTF8Text -- | A wrapper to encode/decode Text as UTF16 (faster but bigger) newtype UTF16Text UTF16Text :: Text -> UTF16Text -- | Decoder monad data Get a -- | A decoded value type Decoded a = Either DecodeException a -- | An exception during decoding data DecodeException