uni-util-2.3.0.2: Utilities for the uniform workbench

Safe HaskellNone
LanguageHaskell98

Util.BinaryInstances

Contents

Description

Instances of the HasBinary class. This includes the standard types (except of course for things like function types and IO) plus a few others.

Synopsis

Documentation

data Choice5 v1 v2 v3 v4 v5 Source #

This is a rather inelegant way of encoding a type with up to 5 alternatives. If 5 is too many, use () for the others, if too few use HasWrapper. In fact HasWrapper is probably better anyway.

Constructors

Choice1 v1 
Choice2 v2 
Choice3 v3 
Choice4 v4 
Choice5 v5 
Instances
(Eq v1, Eq v2, Eq v3, Eq v4, Eq v5) => Eq (Choice5 v1 v2 v3 v4 v5) Source # 
Instance details

Defined in Util.BinaryInstances

Methods

(==) :: Choice5 v1 v2 v3 v4 v5 -> Choice5 v1 v2 v3 v4 v5 -> Bool #

(/=) :: Choice5 v1 v2 v3 v4 v5 -> Choice5 v1 v2 v3 v4 v5 -> Bool #

(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 #

class HasWrapper wrapper m where Source #

A class allowing you to handle types with up to 256 alternatives. If this all seems to complicated, look at the source file and the example for the "Tree" data type.

Minimal complete definition

wraps, unWrap

Methods

wraps Source #

Arguments

:: [Wrap wrapper m]

For each alternative in the type, provide a recognition Byte, and a way of mapping that alternative to the (wrapper)

unWrap Source #

Arguments

:: wrapper 
-> UnWrap m

Map a (wrapper) to the corresponding recognition Byte and the type within the alternative.

newtype Wrapped a Source #

Newtype alias you need to wrap around something which instances HasWrapper to get an actual HasBinary instance. You will then need something like this:

instance Monad m => HasBinary a m where
  writeBin = mapWrite Wrapped
  readBin = mapRead wrapped

Constructors

Wrapped 

Fields

Instances
(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 #

data UnWrap m Source #

Value the HasWrapper instance generates from unWrap to indicate how we should write some value to binary.

Constructors

HasBinary val m => UnWrap Byte val 

wrap0 :: Monad m => Byte -> wrapper -> Wrap wrapper m Source #

Wrap value for constructor with no arguments.

wrap1 :: HasBinary val m => Byte -> (val -> wrapper) -> Wrap wrapper m Source #

Wrap value for constructor with 1 argument.

wrap2 :: HasBinary (val1, val2) m => Byte -> (val1 -> val2 -> wrapper) -> Wrap wrapper m Source #

Wrap value for constructor with 2 arguments.

wrap3 :: HasBinary (val1, val2, val3) m => Byte -> (val1 -> val2 -> val3 -> wrapper) -> Wrap wrapper m Source #

Wrap value for constructor with 3 arguments.

wrap4 :: HasBinary (val1, val2, val3, val4) m => Byte -> (val1 -> val2 -> val3 -> val4 -> wrapper) -> Wrap wrapper m Source #

Wrap value for constructor with 4 arguments.

newtype ReadShow a Source #

Newtype alias for things we want to encode or decode via their Read or Show String representation.

Constructors

ReadShow a 
Instances
(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 #

newtype ViaEnum a Source #

Constructors

ViaEnum 

Fields

Instances
(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 #

newtype Unsigned integral Source #

This is an newtype alias for integral types where the user promises that the value will be non-negative, and so saves us a bit. This is what we use for character data incidentally, so that ASCII characters with codes <128 can be encoded (as themselves) in just one byte.

Constructors

Unsigned integral 
Instances
(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 #

Orphan instances

Monad m => HasBinary Bool m Source # 
Instance details

Methods

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

readBin :: ReadBinary m -> m Bool Source #

Monad m => HasBinary Char m Source # 
Instance details

Methods

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

readBin :: ReadBinary m -> m Char Source #

Monad m => HasBinary Int m Source # 
Instance details

Methods

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

readBin :: ReadBinary m -> m Int Source #

Monad m => HasBinary Int32 m Source # 
Instance details

Methods

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

readBin :: ReadBinary m -> m Int32 Source #

Monad m => HasBinary Integer m Source # 
Instance details

Monad m => HasBinary Word m Source # 
Instance details

Methods

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

readBin :: ReadBinary m -> m Word Source #

Monad m => HasBinary Word32 m Source # 
Instance details

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

Methods

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

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

Monad m => HasBinary CSize m Source # 
Instance details

Methods

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

readBin :: ReadBinary m -> m CSize Source #

HasBinary Byte m Source # 
Instance details

Methods

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

readBin :: ReadBinary m -> m Byte Source #

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

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

Methods

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

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

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

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

Methods

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

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

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

Methods

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

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

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

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

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

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, v3, v4, v5, v6) m) => HasBinary (v1, v2, v3, v4, v5, v6) m Source # 
Instance details

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

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 #