binary-strict-0.1: Binary deserialisation using strict ByteStrings

Portabilityportable to Hugs and GHC.
Stabilityexperimental
MaintainerAdam Langley <agl@imperialviolet.org>

Data.Binary.Strict.Get

Contents

Description

This is a strict version of the Get monad from the binary package. It's pretty much just a copy and paste job from the original source code. The binary team are currently unsure about their future plans w.r.t. strictness, so this is a stop gap measure.

To use, write a function in the Get monad:

 import Data.Binary.Strict.Get as BinStrict
 import Data.ByteString as BS
 parse :: BinStrict.Get
 parse = getWord16be
 main = print $ runGet parse $ BS.pack [1, 1]

This results in a tuple of (Right 257, "") (where the second element is just the remaining data after the parser has run)

Synopsis

The Get type

data Get a Source

Instances

runGet :: Get a -> ByteString -> (Either String a, ByteString)Source

Run a parser on the given input and return the result (either an error string from a call to fail, or the parsing result) and the remainder of of the input.

Parsing

lookAhead :: Get a -> Get aSource

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

lookAheadM :: Get (Maybe a) -> Get (Maybe a)Source

Like lookAhead, but consume the input if gma returns 'Just _'. Fails if gma fails.

lookAheadE :: Get (Either a b) -> Get (Either a b)Source

Like lookAhead, but consume the input if gea returns 'Right _'. Fails if gea fails.

Utility

skip :: Int -> Get ()Source

Skip ahead n bytes. Fails if fewer than n bytes are available.

bytesRead :: Get IntSource

Get the total number of bytes read to this point.

remaining :: Get IntSource

Get the number of remaining unparsed bytes. Useful for checking whether all input has been consumed.

isEmpty :: Get BoolSource

Test whether all input has been consumed, i.e. there are no remaining unparsed bytes.

Parsing particular types

ByteStrings

getByteString :: Int -> Get ByteStringSource

An efficient get method for strict ByteStrings. Fails if fewer than n bytes are left in the input.

Big-endian reads

getWord16be :: Get Word16Source

Read a Word16 in big endian format

getWord32be :: Get Word32Source

Read a Word32 in big endian format

getWord64be :: Get Word64Source

Read a Word64 in big endian format

Little-endian reads

getWord16le :: Get Word16Source

Read a Word16 in little endian format

getWord32le :: Get Word32Source

Read a Word32 in little endian format

getWord64le :: Get Word64Source

Read a Word64 in little endian format

Host-endian, unaligned reads

getWordhost :: Get WordSource

O(1). Read a single native machine word. The word is read in host order, host endian form, for the machine you're on. On a 64 bit machine the Word is an 8 byte value, on a 32 bit machine, 4 bytes.

getWord16host :: Get Word16Source

O(1). Read a 2 byte Word16 in native host order and host endianness.

getWord32host :: Get Word32Source

O(1). Read a Word32 in native host order and host endianness.

getWord64host :: Get Word64Source

O(1). Read a Word64 in native host order and host endianess.