describe-0.4.0.5: Combinators for describing binary data structures

Safe HaskellNone
LanguageHaskell2010

Data.Serialize.Describe.Descriptor

Contents

Synopsis

Documentation

data DescriptorM m s a Source #

Descriptor s a is a monad that describes the binary structure for a structure s while deserializing value a.

Instances
(MonadTrans m, forall (x :: Type -> Type). Monad x => Monad (m x)) => Profunctor (DescriptorM m) Source # 
Instance details

Defined in Data.Serialize.Describe.Internal.Descriptor

Methods

dimap :: (a -> b) -> (c -> d) -> DescriptorM m b c -> DescriptorM m a d

lmap :: (a -> b) -> DescriptorM m b c -> DescriptorM m a c

rmap :: (b -> c) -> DescriptorM m a b -> DescriptorM m a c

(#.) :: Coercible c b => q b c -> DescriptorM m a b -> DescriptorM m a c

(.#) :: Coercible b a => DescriptorM m b c -> q a b -> DescriptorM m a c

(MonadTrans m, forall (x :: Type -> Type). Monad x => Monad (m x)) => Monad (DescriptorM m s) Source # 
Instance details

Defined in Data.Serialize.Describe.Internal.Descriptor

Methods

(>>=) :: DescriptorM m s a -> (a -> DescriptorM m s b) -> DescriptorM m s b #

(>>) :: DescriptorM m s a -> DescriptorM m s b -> DescriptorM m s b #

return :: a -> DescriptorM m s a #

fail :: String -> DescriptorM m s a #

(MonadTrans m, forall (x :: Type -> Type). Monad x => Monad (m x)) => Functor (DescriptorM m s) Source # 
Instance details

Defined in Data.Serialize.Describe.Internal.Descriptor

Methods

fmap :: (a -> b) -> DescriptorM m s a -> DescriptorM m s b #

(<$) :: a -> DescriptorM m s b -> DescriptorM m s a #

(MonadTrans m, forall (x :: Type -> Type). Monad x => Monad (m x)) => Applicative (DescriptorM m s) Source # 
Instance details

Defined in Data.Serialize.Describe.Internal.Descriptor

Methods

pure :: a -> DescriptorM m s a #

(<*>) :: DescriptorM m s (a -> b) -> DescriptorM m s a -> DescriptorM m s b #

liftA2 :: (a -> b -> c) -> DescriptorM m s a -> DescriptorM m s b -> DescriptorM m s c #

(*>) :: DescriptorM m s a -> DescriptorM m s b -> DescriptorM m s b #

(<*) :: DescriptorM m s a -> DescriptorM m s b -> DescriptorM m s a #

Execution

serialize :: s -> Descriptor s a -> ByteString Source #

Convenience function for runPut . unwrapPut s

deserialize :: ByteString -> Descriptor s s -> Either String s Source #

Convenience function for flip runGet bs . unwrapGet

deserializeEx :: ByteString -> Descriptor s s -> s Source #

Like deserialize, but throw a ParserException upon failure rather than an Either.

Conversion to cereal monads

unwrapGet :: (MonadTrans m, forall x. Monad x => Monad (m x)) => DescriptorM m s a -> m Get a Source #

unwrapGet desc takes a DescriptorM and returns only the internal Get monad.

unwrapPut :: (MonadTrans m, forall x. Monad x => Monad (m x)) => s -> DescriptorM m s a -> m PutM a Source #

unwrapPut s desc takes the structure being described and a DescriptorM for it, and returns the internal PutM monad.

Utilities

morphRef :: (MonadTrans m, forall x. Monad x => Monad (m x)) => (s -> t) -> DescriptorM m t a -> DescriptorM m s a Source #

Shifts the reference point of the described structure using the provided morphism. Identical to lmap.

morphTransformer :: (MonadTrans t, MonadTrans u, forall n. Monad n => (Monad (t n), Monad (u n))) => (forall m x. Monad m => t m x -> u m x) -> DescriptorM t s a -> DescriptorM u s a Source #

Morphs the underlying monad transformer

isolate :: (MonadTransControl m, forall x. Monad x => Monad (m x)) => Int -> DescriptorM m s a -> DescriptorM m s a Source #

Wrapper around isolate from Data.Serialize.Get

conditionally :: (MonadTransControl m, forall x. Monad x => Monad (m x)) => (s -> Maybe a) -> (a -> Bool) -> DescriptorM m a a -> DescriptorM m s (Maybe a) Source #

Similar to lookAhead from Data.Serialize.Get; puts only if the field is Just

cursor :: (MonadTrans m, forall x. Monad (m x)) => DescriptorM m s Int Source #

The cursor position, i.e. how many bytes have been written/parsed so far.