uni-util-2.3.0.3: Utilities for the uniform workbench
Safe HaskellNone
LanguageHaskell2010

Util.BinaryUtils

Description

Various functions for declaring new instances of Binary for types.

Synopsis

Documentation

mapWrite :: HasBinary b m => (a -> b) -> WriteBinary m -> a -> m () Source #

Given a function which converts an (a) to something we can already convert to binary, return a writeBin function to be used in instances of HasBinary (a).

mapRead :: (Monad m, HasBinary b m) => (b -> a) -> ReadBinary m -> m a Source #

Given a function which converts something we can already read from binary to (a), return a readBin function to be used in instances of HasBinary (a).

mapWriteIO :: (HasBinary b m, MonadIO m) => (a -> IO b) -> WriteBinary m -> a -> m () Source #

Like mapWrite, but the conversion function is also allowed to use IO.

mapReadIO :: (HasBinary b m, MonadIO m) => (b -> IO a) -> ReadBinary m -> m a Source #

LIke mapRead, but the conversion function is also allowed to use IO.

data ArgMonad arg m a Source #

A monad which hides an additional value which the HasBinary instances should be able to get at. This is used, for example, by CodedValue, to make the View available to instances.

Instances

Instances details
Monad m => Monad (ArgMonad arg m) Source # 
Instance details

Defined in Util.BinaryUtils

Methods

(>>=) :: ArgMonad arg m a -> (a -> ArgMonad arg m b) -> ArgMonad arg m b #

(>>) :: ArgMonad arg m a -> ArgMonad arg m b -> ArgMonad arg m b #

return :: a -> ArgMonad arg m a #

Functor m => Functor (ArgMonad arg m) Source # 
Instance details

Defined in Util.BinaryUtils

Methods

fmap :: (a -> b) -> ArgMonad arg m a -> ArgMonad arg m b #

(<$) :: a -> ArgMonad arg m b -> ArgMonad arg m a #

MonadFail m => MonadFail (ArgMonad arg m) Source # 
Instance details

Defined in Util.BinaryUtils

Methods

fail :: String -> ArgMonad arg m a #

Applicative m => Applicative (ArgMonad arg m) Source # 
Instance details

Defined in Util.BinaryUtils

Methods

pure :: a -> ArgMonad arg m a #

(<*>) :: ArgMonad arg m (a -> b) -> ArgMonad arg m a -> ArgMonad arg m b #

liftA2 :: (a -> b -> c) -> ArgMonad arg m a -> ArgMonad arg m b -> ArgMonad arg m c #

(*>) :: ArgMonad arg m a -> ArgMonad arg m b -> ArgMonad arg m b #

(<*) :: ArgMonad arg m a -> ArgMonad arg m b -> ArgMonad arg m a #

MonadIO m => MonadIO (ArgMonad arg m) Source # 
Instance details

Defined in Util.BinaryUtils

Methods

liftIO :: IO a -> ArgMonad arg m a #

mkArgMonad :: (arg -> m a) -> ArgMonad arg m a Source #

toArgMonad :: m a -> ArgMonad arg m a Source #

runArgMonad :: arg -> ArgMonad arg m a -> m a Source #

data WrappedBinary Source #

A wrapper for instances of Binary. This can be written, but not read (since we wouldn't know what type to decode).

Constructors

forall v.HasBinary v IO => WrappedBinary v 

data WrapBinary m Source #

Constructors

forall v.HasBinary v m => WrapBinary v 

Instances

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