flat-0.4.4.0.0.0.0.2: Principled and efficient bit-oriented binary serialization.
Safe Haskell None
Language Haskell2010

Flat.Instances.Mono

Synopsis

Documentation

sizeSequence :: ( IsSequence mono, Flat ( Element mono)) => mono -> NumBits -> NumBits Source #

Calculate size of an instance of IsSequence as the sum: * of the size of all the elements * plus the size of the array constructors (1 byte every 255 elements plus one final byte)

encodeSequence :: ( Flat ( Element mono), MonoFoldable mono) => mono -> Encoding Source #

Encode an instance of IsSequence, as an array

decodeSequence :: ( Flat ( Element b), IsSequence b) => Get b Source #

Decode an instance of IsSequence, as an array

encodeMap :: ( Flat ( ContainerKey map), Flat ( MapValue map), IsMap map) => map -> Encoding Source #

Encode an instance of IsMap, as a list of (Key,Value) tuples

decodeMap :: ( Flat ( ContainerKey map), Flat ( MapValue map), IsMap map) => Get map Source #

Decode an instance of IsMap, as a list of (Key,Value) tuples

newtype AsArray a Source #

Sequences are defined as Arrays:

Array v = A0 | A1 v (Array v) | A2 v v (Array v) ... | A255 ... (Array v)

In practice, this means that the sequence is encoded as a sequence of blocks of up to 255 elements, with every block preceded by the count of the elements in the block and a final 0-length block.

Lists are defined as:

List a ≡ Nil | Cons a (List a)

The AsList/AsArray wrappers can be used to serialise sequences as Lists or Arrays

>>> tst $ AsArray ([]::[()])
(True,8,[0])
>>> tst $ AsArray [11::Word8,22,33]
(True,40,[3,11,22,33,0])
>>> tst $ AsList ([]::[()])
(True,1,[0])
>>> tst (AsList [11::Word8,22,33])
(True,28,[133,197,164,32])
>>> tst (AsSet (Data.Set.fromList [11::Word8,22,33]))
(True,28,[133,197,164,32])

Constructors

AsArray

Fields