binary-strict-0.4.8.6: Binary deserialisation using strict ByteStrings

CopyrightAdam Langley
LicenseBSD3-style (see LICENSE)
MaintainerAdam Langley <agl@imperialviolet.org>
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

Data.Binary.Strict.BitGet

Contents

Description

This is a reader monad for parsing bit-aligned data. The usual Get monad handles byte aligned data well.

In this monad, the current offset into the input is a number of bits, and fetching n bits from the current position will shift everything correctly. Bit vectors are represented as ByteStrings here either the first n bits are valid (left aligned) or the last n bits are (right aligned).

If one is looking to parse integers etc, right alignment is the easist to work with, however left alignment makes more sense in some situations.

Synopsis

Get BitGet type

data BitGet a Source #

Instances
Monad BitGet Source # 
Instance details

Defined in Data.Binary.Strict.BitGet

Methods

(>>=) :: BitGet a -> (a -> BitGet b) -> BitGet b #

(>>) :: BitGet a -> BitGet b -> BitGet b #

return :: a -> BitGet a #

fail :: String -> BitGet a #

Functor BitGet Source # 
Instance details

Defined in Data.Binary.Strict.BitGet

Methods

fmap :: (a -> b) -> BitGet a -> BitGet b #

(<$) :: a -> BitGet b -> BitGet a #

Applicative BitGet Source # 
Instance details

Defined in Data.Binary.Strict.BitGet

Methods

pure :: a -> BitGet a #

(<*>) :: BitGet (a -> b) -> BitGet a -> BitGet b #

liftA2 :: (a -> b -> c) -> BitGet a -> BitGet b -> BitGet c #

(*>) :: BitGet a -> BitGet b -> BitGet b #

(<*) :: BitGet a -> BitGet b -> BitGet a #

runBitGet :: ByteString -> BitGet a -> Either String a Source #

Run a BitGet on a ByteString

Utility

skip :: Int -> BitGet () Source #

Skip n bits of the input. Fails if less then n bits remain

remaining :: BitGet Int Source #

Return the number of bits remaining to be parsed

isEmpty :: BitGet Bool Source #

Return true if there are no more bits to parse

lookAhead :: BitGet a -> BitGet a Source #

Run ga, but return without consuming its input. Fails if ga fails.

Generic parsing

getBit :: BitGet Bool Source #

Get a single bit from the input

getLeftByteString :: Int -> BitGet ByteString Source #

Get a ByteString with the given number of bits, left aligned.

getRightByteString :: Int -> BitGet ByteString Source #

Get a ByteString with the given number of bits in, right aligned.

Interpreting some number of bits as an unsigned integer

getAsWord16 :: Int -> BitGet Word16 Source #

Read a Word16 in big endian format

getAsWord32 :: Int -> BitGet Word32 Source #

Read a Word32 in big endian format

getAsWord64 :: Int -> BitGet Word64 Source #

Read a Word64 in big endian format

Interpreting some number of bits as a signed integer

getAsInt8 :: Int -> BitGet Int8 Source #

Reads an Int8, sign-extending the input if it has fewer than 8 bits.

getAsInt16 :: Int -> BitGet Int16 Source #

Reads an Int16 in big endian format, sign-extending the input if it has fewer than 16 bits.

getAsInt32 :: Int -> BitGet Int32 Source #

Reads an Int32 in big endian format, sign-extending the input if it has fewer than 32 bits.

getAsInt64 :: Int -> BitGet Int64 Source #

Reads an Int64 in big endian format, sign-extending the input if it has fewer than 64 bits.

Parsing particular types