0.5     None MAn unsigned number of some number of bytes. Valid arguments are 1, 2 and 4ZAn unsigned, little-endian integer of some number of bytes. Valid arguments are 2 and 4A variable length element to be decoded by a custom function. The function's name is given as the single argument and should have type *Monad m => ByteString -> m (v, ByteString)Skip some number of bytesJA fixed size field, the result of which is a ByteString of that length.SDecode a value and ignore it (the result will not be part of the returned tuple)Like variable, but the decoding function is passed the entire result tuple so far. Thus the function whose name passed has type 3Monad m => ByteString -> (...) -> m (v, ByteString)~Takes the most recent element of the result tuple and interprets it as the length of this field. Results in a ByteString Decode a series of bit fields, results in a list of Integers. Each element of the argument is the length of the bit field. The sums of the lengths must be a multiple of 8 Results in a ByteString containing the undecoded bytes so far. Generally used at the end to return the trailing body of a structure, it can actually be used at any point in the decoding to return the trailing part at that point. Unsigned 8-bit int Unsigned 16-bit intUnsigned 32-bit int"Little-endian, unsigned 16-bit int"Little-endian, unsigned 32-bit int+Appends the string with a trailing NUL byte)Appends the string without any terminatorAppends a ByteStringPacks a series of bit fields together. The argument is a list of pairs where the first element is the size (in bits) and the second is the value. The sum of the sizes for a given PackBits must be a multiple of 8rA native Haskell version of htonl for the case where we need to convert to little-endian on a big-endian systemrA native Haskell version of htons for the case where we need to convert to little-endian on a big-endian system4Make a binary string from the list of elements givenFirst byte of a .Convert little-endian  to big-endian .Convert little-endian  to big-endian  .Convert little-endian  to little-endian .Convert little-endian  to little-endian  .Example usage: parsePascalString :: Monad m => ByteString -> m (Word16, ByteString) parsePascalString bs = $( bitSyn [UnsignedLE 2, LengthPrefixed] ) bs!|This only works on little-endian machines as it checks that the foreign functions (htonl and htons) match the native ones1 "#$%&'eThe current byte, the number of bits used in that byte and the (reverse) list of produced bytes.The size (in bits) of the value, and the value()*+,-./0!123     "#$%&'()*+,-./0!1234      !"#$%#$&'()*+,-./0123456789:BitSy_AXXp0msEYQ322uj0LdKpfRData.BitSyntaxReadTypeUnsigned UnsignedLEVariableSkipFixedIgnoreContextLengthPrefixed PackedBitsRestBitBlockU8U16U32U16LEU32LENullTerminated RawString RawByteStringPackBitsmakeBitsdecodeU8 decodeU16 decodeU32 decodeU16LE decodeU32LEbitSynendianSwitch32endianSwitch16bytes_6elQVSg5cWdFrvRnfxTUrHData.ByteString.Internal ByteStringbaseGHC.WordWord16Word32prop_nativeByteShuffle32htonshtonllittleEndian32littleEndian16getBytespackBitsbits fromBytes decodeBits unpackBitsunpackBitsInner readElement decodeHelper decGetNameprop_bitPackingprop_nativeByteShuffle16prop_littleEndian16prop_littleEndian32