uni-util-2.3.0.2: Utilities for the uniform workbench

Safe HaskellNone
LanguageHaskell98

Util.Binary

Description

Library for converting types to and from binary, so that they can be written to and from files, stored compactly in memory, and so on.

This is a preliminary version of the library, hence I have decided not to optimise heavily, beyond putting in strictness annotations in where they seem appropriate.

A good place to start optimising would probably be the separate Bytes libary.

See also BinaryInstances, which declares instances for the standard types (and one or two others), BinaryUtils, which contains (mostly) material for declaring new instances, BinaryExtras, which contains other miscellaneous utilities, and finally BinaryAll which just imports and reexports everything.

Synopsis

Documentation

hWrite :: HasBinary a IO => Handle -> a -> IO () Source #

Write an (a) to a Handle

hRead :: HasBinary a IO => Handle -> IO a Source #

Read an (a) from a Handle

writeToBytes :: HasBinary a StateBinArea => a -> IO (Bytes, Int) Source #

Write an (a) to memory. The Int is the length of the area.

writeToBytes0 :: HasBinary a StateBinArea => Int -> a -> IO (Bytes, Int) Source #

Write an (a) to memory. The integer argument is an initial guess at the number of bytes that will be needed. This should be greater than 0. If it is too small, there will be unnecessary reallocations; if too large, too much memory will be used.

readFromBytes :: HasBinary a StateBinArea => (Bytes, Int) -> IO a Source #

Read a value from binary data in memory. The Int is the length, and there will be an error if this is either too small or too large.

class HasBinary a m where Source #

Minimal complete definition

writeBin, readBin

Methods

writeBin Source #

Arguments

:: WriteBinary m 
-> a 
-> m ()

Given a consumer of binary data, and an (a), write out the (a)

readBin Source #

Arguments

:: ReadBinary m 
-> m a

Given a source of binary data, provide an (a)

Instances
Monad m => HasBinary Bool m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> Bool -> m () Source #

readBin :: ReadBinary m -> m Bool Source #

Monad m => HasBinary Char m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> Char -> m () Source #

readBin :: ReadBinary m -> m Char Source #

Monad m => HasBinary Int m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> Int -> m () Source #

readBin :: ReadBinary m -> m Int Source #

Monad m => HasBinary Int32 m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> Int32 -> m () Source #

readBin :: ReadBinary m -> m Int32 Source #

Monad m => HasBinary Integer m Source # 
Instance details

Defined in Util.BinaryInstances

Monad m => HasBinary Word m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> Word -> m () Source #

readBin :: ReadBinary m -> m Word Source #

Monad m => HasBinary Word32 m Source # 
Instance details

Defined in Util.BinaryInstances

Monad m => HasBinary () m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> () -> m () Source #

readBin :: ReadBinary m -> m () Source #

Monad m => HasBinary CSize m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> CSize -> m () Source #

readBin :: ReadBinary m -> m CSize Source #

Monad m => HasBinary ClockTime m Source # 
Instance details

Defined in Util.BinaryExtras

HasBinary Byte m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> Byte -> m () Source #

readBin :: ReadBinary m -> m Byte Source #

MonadIO m => HasBinary ICStringLen m Source # 
Instance details

Defined in Util.ICStringLen

(Monad m, HasBinary a m) => HasBinary [a] m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> [a] -> m () Source #

readBin :: ReadBinary m -> m [a] Source #

(Monad m, HasBinary a m) => HasBinary (Maybe a) m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> Maybe a -> m () Source #

readBin :: ReadBinary m -> m (Maybe a) Source #

HasBinary (WrapBinary m) m Source # 
Instance details

Defined in Util.BinaryUtils

Methods

writeBin :: WriteBinary m -> WrapBinary m -> m () Source #

readBin :: ReadBinary m -> m (WrapBinary m) Source #

(Monad m, Enum a) => HasBinary (ViaEnum a) m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> ViaEnum a -> m () Source #

readBin :: ReadBinary m -> m (ViaEnum a) Source #

(Read a, Show a, Monad m) => HasBinary (ReadShow a) m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> ReadShow a -> m () Source #

readBin :: ReadBinary m -> m (ReadShow a) Source #

(Monad m, HasWrapper wrapper m) => HasBinary (Wrapped wrapper) m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> Wrapped wrapper -> m () Source #

readBin :: ReadBinary m -> m (Wrapped wrapper) Source #

(Monad m, Integral integral, Bits integral) => HasBinary (Unsigned integral) m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> Unsigned integral -> m () Source #

readBin :: ReadBinary m -> m (Unsigned integral) Source #

(Monad m, StringClass a) => HasBinary (Str a) m Source # 
Instance details

Defined in Util.AtomString

Methods

writeBin :: WriteBinary m -> Str a -> m () Source #

readBin :: ReadBinary m -> m (Str a) Source #

(Monad m, HasBinary a m, HasBinary b m) => HasBinary (Either a b) m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> Either a b -> m () Source #

readBin :: ReadBinary m -> m (Either a b) Source #

(Monad m, HasBinary v1 m, HasBinary v2 m) => HasBinary (v1, v2) m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> (v1, v2) -> m () Source #

readBin :: ReadBinary m -> m (v1, v2) Source #

Monad m => HasBinary (Bytes, Int) m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> (Bytes, Int) -> m () Source #

readBin :: ReadBinary m -> m (Bytes, Int) Source #

(HasBinary (from, to) m, Ord from, MonadIO m) => HasBinary (Registry from to) m Source # 
Instance details

Defined in Util.Registry

Methods

writeBin :: WriteBinary m -> Registry from to -> m () Source #

readBin :: ReadBinary m -> m (Registry from to) Source #

(Monad m, HasBinary v1 m, HasBinary (v2, v3) m) => HasBinary (v1, v2, v3) m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> (v1, v2, v3) -> m () Source #

readBin :: ReadBinary m -> m (v1, v2, v3) Source #

(Monad m, HasBinary v1 m, HasBinary (v2, v3, v4) m) => HasBinary (v1, v2, v3, v4) m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> (v1, v2, v3, v4) -> m () Source #

readBin :: ReadBinary m -> m (v1, v2, v3, v4) Source #

(Monad m, HasBinary v1 m, HasBinary (v2, v3, v4, v5) m) => HasBinary (v1, v2, v3, v4, v5) m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> (v1, v2, v3, v4, v5) -> m () Source #

readBin :: ReadBinary m -> m (v1, v2, v3, v4, v5) Source #

(Monad m, HasBinary v1 m, HasBinary v2 m, HasBinary v3 m, HasBinary v4 m, HasBinary v5 m) => HasBinary (Choice5 v1 v2 v3 v4 v5) m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> Choice5 v1 v2 v3 v4 v5 -> m () Source #

readBin :: ReadBinary m -> m (Choice5 v1 v2 v3 v4 v5) Source #

(Monad m, HasBinary v1 m, HasBinary (v2, v3, v4, v5, v6) m) => HasBinary (v1, v2, v3, v4, v5, v6) m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> (v1, v2, v3, v4, v5, v6) -> m () Source #

readBin :: ReadBinary m -> m (v1, v2, v3, v4, v5, v6) Source #

(Monad m, HasBinary v1 m, HasBinary (v2, v3, v4, v5, v6, v7) m) => HasBinary (v1, v2, v3, v4, v5, v6, v7) m Source # 
Instance details

Defined in Util.BinaryInstances

Methods

writeBin :: WriteBinary m -> (v1, v2, v3, v4, v5, v6, v7) -> m () Source #

readBin :: ReadBinary m -> m (v1, v2, v3, v4, v5, v6, v7) Source #

data WriteBinary m Source #

A consumer of binary data

Constructors

WriteBinary 

Fields

data ReadBinary m Source #

A source of binary data

Constructors

ReadBinary 

Fields

data BinArea Source #

Somewhere to where you write binary data in memory.

type StateBinArea = StateT BinArea IO Source #

a state monad containing the BinArea.

mkEmptyBinArea :: Int -> IO BinArea Source #

Create an empty BinArea, given the initial size.

writeBinaryBinArea :: WriteBinary StateBinArea Source #

A BinArea as somewhere to put binary data.

closeBinArea :: BinArea -> IO (Bytes, Int) Source #

Return all the data currently in the BinArea

mkBinArea :: (Bytes, Int) -> BinArea Source #

Turn binary data in memory into a BinArea (so that you can read from it).

readBinaryBinArea :: ReadBinary StateBinArea Source #

A BinArea as a source of binary data.

liftWriteBinary :: (forall a. m a -> n a) -> WriteBinary m -> WriteBinary n Source #

Transform the monad used by a WriteBinary

liftReadBinary :: (forall a. m a -> n a) -> ReadBinary m -> ReadBinary n Source #

Transform the monad used by a ReadBinary