mempack-0.1.0.0: Short description
Copyright(c) Alexey Kuleshevich 2024
LicenseBSD3
MaintainerAlexey Kuleshevich <alexey@kuleshevi.ch>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.MemPack

Description

 
Synopsis

Documentation

newtype Pack s a Source #

Monad that is used for serializing data into a MutableByteArray. It is based on StateT that tracks the current index into the MutableByteArray where next write is expected to happen.

Constructors

Pack 

Fields

Instances

Instances details
MonadState Int (Pack s) Source # 
Instance details

Defined in Data.MemPack

Methods

get :: Pack s Int #

put :: Int -> Pack s () #

state :: (Int -> (a, Int)) -> Pack s a #

Applicative (Pack s) Source # 
Instance details

Defined in Data.MemPack

Methods

pure :: a -> Pack s a #

(<*>) :: Pack s (a -> b) -> Pack s a -> Pack s b #

liftA2 :: (a -> b -> c) -> Pack s a -> Pack s b -> Pack s c #

(*>) :: Pack s a -> Pack s b -> Pack s b #

(<*) :: Pack s a -> Pack s b -> Pack s a #

Functor (Pack s) Source # 
Instance details

Defined in Data.MemPack

Methods

fmap :: (a -> b) -> Pack s a -> Pack s b #

(<$) :: a -> Pack s b -> Pack s a #

Monad (Pack s) Source # 
Instance details

Defined in Data.MemPack

Methods

(>>=) :: Pack s a -> (a -> Pack s b) -> Pack s b #

(>>) :: Pack s a -> Pack s b -> Pack s b #

return :: a -> Pack s a #

MonadReader (MutableByteArray s) (Pack s) Source # 
Instance details

Defined in Data.MemPack

Methods

ask :: Pack s (MutableByteArray s) #

local :: (MutableByteArray s -> MutableByteArray s) -> Pack s a -> Pack s a #

reader :: (MutableByteArray s -> a) -> Pack s a #

newtype Unpack b a Source #

Monad that is used for deserializing data from a memory Buffer. It is based on StateT that tracks the current index into the Buffer a, from where the next read suppose to happen. Unpacking can fail with MonadFail instance or with failUnpack that provides a more type safe way of failing using Error interface.

Constructors

Unpack 

Fields

Instances

Instances details
MonadReader b (Unpack b) Source # 
Instance details

Defined in Data.MemPack

Methods

ask :: Unpack b b #

local :: (b -> b) -> Unpack b a -> Unpack b a #

reader :: (b -> a) -> Unpack b a #

MonadState Int (Unpack b) Source # 
Instance details

Defined in Data.MemPack

Methods

get :: Unpack b Int #

put :: Int -> Unpack b () #

state :: (Int -> (a, Int)) -> Unpack b a #

MonadFail (Unpack b) Source # 
Instance details

Defined in Data.MemPack

Methods

fail :: String -> Unpack b a #

Alternative (Unpack b) Source # 
Instance details

Defined in Data.MemPack

Methods

empty :: Unpack b a #

(<|>) :: Unpack b a -> Unpack b a -> Unpack b a #

some :: Unpack b a -> Unpack b [a] #

many :: Unpack b a -> Unpack b [a] #

Applicative (Unpack b) Source # 
Instance details

Defined in Data.MemPack

Methods

pure :: a -> Unpack b a #

(<*>) :: Unpack b (a -> b0) -> Unpack b a -> Unpack b b0 #

liftA2 :: (a -> b0 -> c) -> Unpack b a -> Unpack b b0 -> Unpack b c #

(*>) :: Unpack b a -> Unpack b b0 -> Unpack b b0 #

(<*) :: Unpack b a -> Unpack b b0 -> Unpack b a #

Functor (Unpack s) Source # 
Instance details

Defined in Data.MemPack

Methods

fmap :: (a -> b) -> Unpack s a -> Unpack s b #

(<$) :: a -> Unpack s b -> Unpack s a #

Monad (Unpack b) Source # 
Instance details

Defined in Data.MemPack

Methods

(>>=) :: Unpack b a -> (a -> Unpack b b0) -> Unpack b b0 #

(>>) :: Unpack b a -> Unpack b b0 -> Unpack b b0 #

return :: a -> Unpack b a #

class MemPack a where Source #

Efficient serialization interface that operates directly on memory buffers.

Minimal complete definition

packedByteCount, packM, unpackM

Methods

typeName :: String Source #

Name of the type that is being deserialized for error reporting. Default implementation relies on Typeable.

default typeName :: Typeable a => String Source #

packedByteCount :: a -> Int Source #

Report the exact size in number of bytes that packed version of this type will occupy. It is very important to get this right, otherwise packM will result in a runtime exception. Another words this is the expected property that it should hold:

packedByteCount a == bufferByteCount (pack a)

packM :: a -> Pack s () Source #

Write binary representation of a type into the MutableByteArray which can be accessed with ask, whenever direct operations on it are necessary.

unpackM :: Buffer b => Unpack b a Source #

Read binary representation of the type directly from the buffer, which can be accessed with ask when necessary. Direct reads from the buffer should be preceded with advancing the buffer offset with MonadState by the number of bytes that will be consumed from the buffer and making sure that no reads outside of the buffer can happen. Violation of these rules will lead to segfaults.

Instances

Instances details
MemPack ByteArray Source # 
Instance details

Defined in Data.MemPack

MemPack Int16 Source # 
Instance details

Defined in Data.MemPack

MemPack Int32 Source # 
Instance details

Defined in Data.MemPack

MemPack Int64 Source # 
Instance details

Defined in Data.MemPack

MemPack Int8 Source # 
Instance details

Defined in Data.MemPack

MemPack Word16 Source # 
Instance details

Defined in Data.MemPack

MemPack Word32 Source # 
Instance details

Defined in Data.MemPack

MemPack Word64 Source # 
Instance details

Defined in Data.MemPack

MemPack Word8 Source # 
Instance details

Defined in Data.MemPack

MemPack ByteString Source # 
Instance details

Defined in Data.MemPack

MemPack ShortByteString Source # 
Instance details

Defined in Data.MemPack

MemPack Length Source # 
Instance details

Defined in Data.MemPack

MemPack Tag Source # 
Instance details

Defined in Data.MemPack

MemPack Integer Source # 
Instance details

Defined in Data.MemPack

MemPack Natural Source # 
Instance details

Defined in Data.MemPack

MemPack () Source # 
Instance details

Defined in Data.MemPack

Methods

typeName :: String Source #

packedByteCount :: () -> Int Source #

packM :: () -> Pack s () Source #

unpackM :: Buffer b => Unpack b () Source #

MemPack Bool Source # 
Instance details

Defined in Data.MemPack

MemPack Char Source # 
Instance details

Defined in Data.MemPack

MemPack Double Source # 
Instance details

Defined in Data.MemPack

MemPack Float Source # 
Instance details

Defined in Data.MemPack

MemPack Int Source # 
Instance details

Defined in Data.MemPack

MemPack Word Source # 
Instance details

Defined in Data.MemPack

MemPack a => MemPack (Complex a) Source # 
Instance details

Defined in Data.MemPack

MemPack (Ptr a) Source # 
Instance details

Defined in Data.MemPack

(MemPack a, Integral a) => MemPack (Ratio a) Source # 
Instance details

Defined in Data.MemPack

MemPack (StablePtr a) Source # 
Instance details

Defined in Data.MemPack

MemPack (VarLen Word16) Source # 
Instance details

Defined in Data.MemPack

MemPack (VarLen Word32) Source # 
Instance details

Defined in Data.MemPack

MemPack (VarLen Word64) Source # 
Instance details

Defined in Data.MemPack

MemPack (VarLen Word) Source # 
Instance details

Defined in Data.MemPack

MemPack a => MemPack (Maybe a) Source # 
Instance details

Defined in Data.MemPack

MemPack a => MemPack [a] Source # 
Instance details

Defined in Data.MemPack

Methods

typeName :: String Source #

packedByteCount :: [a] -> Int Source #

packM :: [a] -> Pack s () Source #

unpackM :: Buffer b => Unpack b [a] Source #

(MemPack a, MemPack b) => MemPack (Either a b) Source # 
Instance details

Defined in Data.MemPack

(MemPack a, MemPack b) => MemPack (a, b) Source # 
Instance details

Defined in Data.MemPack

Methods

typeName :: String Source #

packedByteCount :: (a, b) -> Int Source #

packM :: (a, b) -> Pack s () Source #

unpackM :: Buffer b0 => Unpack b0 (a, b) Source #

(MemPack a, MemPack b, MemPack c) => MemPack (a, b, c) Source # 
Instance details

Defined in Data.MemPack

Methods

typeName :: String Source #

packedByteCount :: (a, b, c) -> Int Source #

packM :: (a, b, c) -> Pack s () Source #

unpackM :: Buffer b0 => Unpack b0 (a, b, c) Source #

(MemPack a, MemPack b, MemPack c, MemPack d) => MemPack (a, b, c, d) Source # 
Instance details

Defined in Data.MemPack

Methods

typeName :: String Source #

packedByteCount :: (a, b, c, d) -> Int Source #

packM :: (a, b, c, d) -> Pack s () Source #

unpackM :: Buffer b0 => Unpack b0 (a, b, c, d) Source #

(MemPack a, MemPack b, MemPack c, MemPack d, MemPack e) => MemPack (a, b, c, d, e) Source # 
Instance details

Defined in Data.MemPack

Methods

typeName :: String Source #

packedByteCount :: (a, b, c, d, e) -> Int Source #

packM :: (a, b, c, d, e) -> Pack s () Source #

unpackM :: Buffer b0 => Unpack b0 (a, b, c, d, e) Source #

(MemPack a, MemPack b, MemPack c, MemPack d, MemPack e, MemPack f) => MemPack (a, b, c, d, e, f) Source # 
Instance details

Defined in Data.MemPack

Methods

typeName :: String Source #

packedByteCount :: (a, b, c, d, e, f) -> Int Source #

packM :: (a, b, c, d, e, f) -> Pack s () Source #

unpackM :: Buffer b0 => Unpack b0 (a, b, c, d, e, f) Source #

(MemPack a, MemPack b, MemPack c, MemPack d, MemPack e, MemPack f, MemPack g) => MemPack (a, b, c, d, e, f, g) Source # 
Instance details

Defined in Data.MemPack

Methods

typeName :: String Source #

packedByteCount :: (a, b, c, d, e, f, g) -> Int Source #

packM :: (a, b, c, d, e, f, g) -> Pack s () Source #

unpackM :: Buffer b0 => Unpack b0 (a, b, c, d, e, f, g) Source #

Packing

pack :: forall a. (MemPack a, HasCallStack) => a -> ByteArray Source #

Serialize a type into an unpinned ByteArray

Examples

Expand
>>> :set -XTypeApplications
>>> unpack @[Int] $ pack ([1,2,3,4,5] :: [Int])
Right [1,2,3,4,5]

packByteArray Source #

Arguments

:: forall a. (MemPack a, HasCallStack) 
=> Bool

Should the array be allocated in pinned memory?

-> a 
-> ByteArray 

Same as pack, but allows controlling the pinnedness of allocated memory

packByteString :: forall a. (MemPack a, HasCallStack) => a -> ByteString Source #

Serialize a type into a pinned ByteString

packShortByteString :: forall a. (MemPack a, HasCallStack) => a -> ShortByteString Source #

Serialize a type into an unpinned ShortByteString

packMutableByteArray Source #

Arguments

:: forall a s. (MemPack a, HasCallStack) 
=> Bool

Should the array be allocated in pinned memory?

-> a 
-> ST s (MutableByteArray s) 

Same as packByteArray, but produces a mutable array instead

Helpers

packIncrement :: MemPack a => a -> Pack s Int Source #

Increment the offset counter of Pack monad by then number of packedByteCount and return the starting offset.

guardAdvanceUnpack :: Buffer b => Int -> Unpack b Int Source #

Increment the offset counter of Unpack monad by the supplied number of bytes. Returns the original offset or fails with RanOutOfBytesError whenever there is not enough bytes in the Buffer.

Unpacking

unpack :: forall a b. (MemPack a, Buffer b, HasCallStack) => b -> Either SomeError a Source #

Unpack a memory Buffer into a type using its MemPack instance. Besides potential unpacking failures due to a malformed buffer it will also fail the supplied Buffer was not fully consumed. Use unpackLeftOver, whenever a partially consumed buffer is possible.

unpackFail :: forall a b. (MemPack a, Buffer b, HasCallStack) => b -> Fail SomeError a Source #

Same as unpack except fails in a Fail monad, instead of Either.

unpackMonadFail :: forall a b m. (MemPack a, Buffer b, MonadFail m) => b -> m a Source #

Same as unpackFail except fails in any MonadFail, instead of Fail.

unpackError :: forall a b. (MemPack a, Buffer b, HasCallStack) => b -> a Source #

Same as unpack except throws a runtime exception upon a failure

unpackLeftOver :: forall a b. (MemPack a, Buffer b, HasCallStack) => b -> Fail SomeError (a, Int) Source #

Unpack a memory Buffer into a type using its MemPack instance. Besides the unpacked type it also returns an index into a buffer where unpacked has stopped.

Helpers

failUnpack :: Error e => e -> Unpack b a Source #

Failing unpacking with an Error.

unpackByteArray :: Buffer b => Bool -> Unpack b ByteArray Source #

This is the implementation of unpackM for ByteArray and ByteString

Helper packers

newtype VarLen a Source #

Variable length encoding for bounded types. This type of encoding will use less memory for small values, but for larger values it will consume more memory and will be slower during packing/unpacking.

Constructors

VarLen 

Fields

Instances

Instances details
Bits a => Bits (VarLen a) Source # 
Instance details

Defined in Data.MemPack

Methods

(.&.) :: VarLen a -> VarLen a -> VarLen a #

(.|.) :: VarLen a -> VarLen a -> VarLen a #

xor :: VarLen a -> VarLen a -> VarLen a #

complement :: VarLen a -> VarLen a #

shift :: VarLen a -> Int -> VarLen a #

rotate :: VarLen a -> Int -> VarLen a #

zeroBits :: VarLen a #

bit :: Int -> VarLen a #

setBit :: VarLen a -> Int -> VarLen a #

clearBit :: VarLen a -> Int -> VarLen a #

complementBit :: VarLen a -> Int -> VarLen a #

testBit :: VarLen a -> Int -> Bool #

bitSizeMaybe :: VarLen a -> Maybe Int #

bitSize :: VarLen a -> Int #

isSigned :: VarLen a -> Bool #

shiftL :: VarLen a -> Int -> VarLen a #

unsafeShiftL :: VarLen a -> Int -> VarLen a #

shiftR :: VarLen a -> Int -> VarLen a #

unsafeShiftR :: VarLen a -> Int -> VarLen a #

rotateL :: VarLen a -> Int -> VarLen a #

rotateR :: VarLen a -> Int -> VarLen a #

popCount :: VarLen a -> Int #

FiniteBits a => FiniteBits (VarLen a) Source # 
Instance details

Defined in Data.MemPack

Bounded a => Bounded (VarLen a) Source # 
Instance details

Defined in Data.MemPack

Methods

minBound :: VarLen a #

maxBound :: VarLen a #

Enum a => Enum (VarLen a) Source # 
Instance details

Defined in Data.MemPack

Methods

succ :: VarLen a -> VarLen a #

pred :: VarLen a -> VarLen a #

toEnum :: Int -> VarLen a #

fromEnum :: VarLen a -> Int #

enumFrom :: VarLen a -> [VarLen a] #

enumFromThen :: VarLen a -> VarLen a -> [VarLen a] #

enumFromTo :: VarLen a -> VarLen a -> [VarLen a] #

enumFromThenTo :: VarLen a -> VarLen a -> VarLen a -> [VarLen a] #

Num a => Num (VarLen a) Source # 
Instance details

Defined in Data.MemPack

Methods

(+) :: VarLen a -> VarLen a -> VarLen a #

(-) :: VarLen a -> VarLen a -> VarLen a #

(*) :: VarLen a -> VarLen a -> VarLen a #

negate :: VarLen a -> VarLen a #

abs :: VarLen a -> VarLen a #

signum :: VarLen a -> VarLen a #

fromInteger :: Integer -> VarLen a #

Integral a => Integral (VarLen a) Source # 
Instance details

Defined in Data.MemPack

Methods

quot :: VarLen a -> VarLen a -> VarLen a #

rem :: VarLen a -> VarLen a -> VarLen a #

div :: VarLen a -> VarLen a -> VarLen a #

mod :: VarLen a -> VarLen a -> VarLen a #

quotRem :: VarLen a -> VarLen a -> (VarLen a, VarLen a) #

divMod :: VarLen a -> VarLen a -> (VarLen a, VarLen a) #

toInteger :: VarLen a -> Integer #

Real a => Real (VarLen a) Source # 
Instance details

Defined in Data.MemPack

Methods

toRational :: VarLen a -> Rational #

Show a => Show (VarLen a) Source # 
Instance details

Defined in Data.MemPack

Methods

showsPrec :: Int -> VarLen a -> ShowS #

show :: VarLen a -> String #

showList :: [VarLen a] -> ShowS #

Eq a => Eq (VarLen a) Source # 
Instance details

Defined in Data.MemPack

Methods

(==) :: VarLen a -> VarLen a -> Bool #

(/=) :: VarLen a -> VarLen a -> Bool #

Ord a => Ord (VarLen a) Source # 
Instance details

Defined in Data.MemPack

Methods

compare :: VarLen a -> VarLen a -> Ordering #

(<) :: VarLen a -> VarLen a -> Bool #

(<=) :: VarLen a -> VarLen a -> Bool #

(>) :: VarLen a -> VarLen a -> Bool #

(>=) :: VarLen a -> VarLen a -> Bool #

max :: VarLen a -> VarLen a -> VarLen a #

min :: VarLen a -> VarLen a -> VarLen a #

MemPack (VarLen Word16) Source # 
Instance details

Defined in Data.MemPack

MemPack (VarLen Word32) Source # 
Instance details

Defined in Data.MemPack

MemPack (VarLen Word64) Source # 
Instance details

Defined in Data.MemPack

MemPack (VarLen Word) Source # 
Instance details

Defined in Data.MemPack

newtype Length Source #

This is a helper type useful for serializing number of elements in data structures. It uses VarLen underneath, since sizes of common data structures aren't too big. It also prevents negative values from being serialized and deserialized.

Constructors

Length 

Fields

Instances

Instances details
Bounded Length Source # 
Instance details

Defined in Data.MemPack

Enum Length Source # 
Instance details

Defined in Data.MemPack

Num Length Source # 
Instance details

Defined in Data.MemPack

Show Length Source # 
Instance details

Defined in Data.MemPack

Eq Length Source # 
Instance details

Defined in Data.MemPack

Methods

(==) :: Length -> Length -> Bool #

(/=) :: Length -> Length -> Bool #

MemPack Length Source # 
Instance details

Defined in Data.MemPack

newtype Tag Source #

This is a helper type that is useful for creating MemPack instances for sum types.

Constructors

Tag 

Fields

Instances

Instances details
Bounded Tag Source # 
Instance details

Defined in Data.MemPack

Methods

minBound :: Tag #

maxBound :: Tag #

Enum Tag Source # 
Instance details

Defined in Data.MemPack

Methods

succ :: Tag -> Tag #

pred :: Tag -> Tag #

toEnum :: Int -> Tag #

fromEnum :: Tag -> Int #

enumFrom :: Tag -> [Tag] #

enumFromThen :: Tag -> Tag -> [Tag] #

enumFromTo :: Tag -> Tag -> [Tag] #

enumFromThenTo :: Tag -> Tag -> Tag -> [Tag] #

Num Tag Source # 
Instance details

Defined in Data.MemPack

Methods

(+) :: Tag -> Tag -> Tag #

(-) :: Tag -> Tag -> Tag #

(*) :: Tag -> Tag -> Tag #

negate :: Tag -> Tag #

abs :: Tag -> Tag #

signum :: Tag -> Tag #

fromInteger :: Integer -> Tag #

Show Tag Source # 
Instance details

Defined in Data.MemPack

Methods

showsPrec :: Int -> Tag -> ShowS #

show :: Tag -> String #

showList :: [Tag] -> ShowS #

Eq Tag Source # 
Instance details

Defined in Data.MemPack

Methods

(==) :: Tag -> Tag -> Bool #

(/=) :: Tag -> Tag -> Bool #

Ord Tag Source # 
Instance details

Defined in Data.MemPack

Methods

compare :: Tag -> Tag -> Ordering #

(<) :: Tag -> Tag -> Bool #

(<=) :: Tag -> Tag -> Bool #

(>) :: Tag -> Tag -> Bool #

(>=) :: Tag -> Tag -> Bool #

max :: Tag -> Tag -> Tag #

min :: Tag -> Tag -> Tag #

MemPack Tag Source # 
Instance details

Defined in Data.MemPack

packTagM :: Tag -> Pack s () Source #

unknownTagM :: forall a m b. (MemPack a, MonadFail m) => Tag -> m b Source #

Internal utilities

replicateTailM :: Monad m => Int -> m a -> m [a] Source #

Tail recursive version of replicateM

lift_# :: (State# s -> State# s) -> Pack s () Source #

st_ :: (State# s -> State# s) -> ST s () Source #

Re-exports for GeneralizedNewtypeDeriving

newtype StateT s (m :: Type -> Type) a #

A state transformer monad parameterized by:

  • s - The state.
  • m - The inner monad.

The return function leaves the state unchanged, while >>= uses the final state of the first computation as the initial state of the second.

Constructors

StateT 

Fields

Instances

Instances details
MonadReader r m => MonadReader r (StateT s m) 
Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: StateT s m r #

local :: (r -> r) -> StateT s m a -> StateT s m a #

reader :: (r -> a) -> StateT s m a #

Monad m => MonadState s (StateT s m) 
Instance details

Defined in Control.Monad.State.Class

Methods

get :: StateT s m s #

put :: s -> StateT s m () #

state :: (s -> (a, s)) -> StateT s m a #

MonadTrans (StateT s) 
Instance details

Defined in Control.Monad.Trans.State.Strict

Methods

lift :: Monad m => m a -> StateT s m a #

MonadFail m => MonadFail (StateT s m) 
Instance details

Defined in Control.Monad.Trans.State.Strict

Methods

fail :: String -> StateT s m a #

MonadFix m => MonadFix (StateT s m) 
Instance details

Defined in Control.Monad.Trans.State.Strict

Methods

mfix :: (a -> StateT s m a) -> StateT s m a #

MonadIO m => MonadIO (StateT s m) 
Instance details

Defined in Control.Monad.Trans.State.Strict

Methods

liftIO :: IO a -> StateT s m a #

Contravariant m => Contravariant (StateT s m) 
Instance details

Defined in Control.Monad.Trans.State.Strict

Methods

contramap :: (a' -> a) -> StateT s m a -> StateT s m a' #

(>$) :: b -> StateT s m b -> StateT s m a #

(Functor m, MonadPlus m) => Alternative (StateT s m) 
Instance details

Defined in Control.Monad.Trans.State.Strict

Methods

empty :: StateT s m a #

(<|>) :: StateT s m a -> StateT s m a -> StateT s m a #

some :: StateT s m a -> StateT s m [a] #

many :: StateT s m a -> StateT s m [a] #

(Functor m, Monad m) => Applicative (StateT s m) 
Instance details

Defined in Control.Monad.Trans.State.Strict

Methods

pure :: a -> StateT s m a #

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

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

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

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

Functor m => Functor (StateT s m) 
Instance details

Defined in Control.Monad.Trans.State.Strict

Methods

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

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

Monad m => Monad (StateT s m) 
Instance details

Defined in Control.Monad.Trans.State.Strict

Methods

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

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

return :: a -> StateT s m a #

MonadPlus m => MonadPlus (StateT s m) 
Instance details

Defined in Control.Monad.Trans.State.Strict

Methods

mzero :: StateT s m a #

mplus :: StateT s m a -> StateT s m a -> StateT s m a #

Generic (StateT s m a) 
Instance details

Defined in Control.Monad.Trans.State.Strict

Associated Types

type Rep (StateT s m a) :: Type -> Type #

Methods

from :: StateT s m a -> Rep (StateT s m a) x #

to :: Rep (StateT s m a) x -> StateT s m a #

type Rep (StateT s m a) 
Instance details

Defined in Control.Monad.Trans.State.Strict

type Rep (StateT s m a) = D1 ('MetaData "StateT" "Control.Monad.Trans.State.Strict" "transformers-0.6.1.0" 'True) (C1 ('MetaCons "StateT" 'PrefixI 'True) (S1 ('MetaSel ('Just "runStateT") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (s -> m (a, s)))))

newtype FailT e (m :: Type -> Type) a #

Fail monad transformer that plays well with MonadFail type class.

Constructors

FailT (m (Either [e] a)) 

Instances

Instances details
MonadRWS r w s m => MonadRWS r w s (FailT e m)

Since: FailT-0.1.1

Instance details

Defined in Control.Monad.Trans.Fail

MonadAccum w m => MonadAccum w (FailT e m)

Since: FailT-0.1.1

Instance details

Defined in Control.Monad.Trans.Fail

Methods

look :: FailT e m w #

add :: w -> FailT e m () #

accum :: (w -> (a, w)) -> FailT e m a #

MonadError e m => MonadError e (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

throwError :: e -> FailT e m a #

catchError :: FailT e m a -> (e -> FailT e m a) -> FailT e m a #

MonadReader r m => MonadReader r (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

ask :: FailT e m r #

local :: (r -> r) -> FailT e m a -> FailT e m a #

reader :: (r -> a) -> FailT e m a #

MonadSelect r m => MonadSelect r (FailT e m)

Since: FailT-0.1.1

Instance details

Defined in Control.Monad.Trans.Fail

Methods

select :: ((a -> r) -> a) -> FailT e m a #

MonadState s m => MonadState s (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

get :: FailT e m s #

put :: s -> FailT e m () #

state :: (s -> (a, s)) -> FailT e m a #

MonadWriter w m => MonadWriter w (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

writer :: (a, w) -> FailT e m a #

tell :: w -> FailT e m () #

listen :: FailT e m a -> FailT e m (a, w) #

pass :: FailT e m (a, w -> w) -> FailT e m a #

MonadTrans (FailT e) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

lift :: Monad m => m a -> FailT e m a #

(IsString e, Monad m) => MonadFail (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

fail :: String -> FailT e m a #

MonadFix m => MonadFix (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

mfix :: (a -> FailT e m a) -> FailT e m a #

MonadIO m => MonadIO (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

liftIO :: IO a -> FailT e m a #

MonadZip m => MonadZip (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

mzip :: FailT e m a -> FailT e m b -> FailT e m (a, b) #

mzipWith :: (a -> b -> c) -> FailT e m a -> FailT e m b -> FailT e m c #

munzip :: FailT e m (a, b) -> (FailT e m a, FailT e m b) #

Foldable f => Foldable (FailT e f) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

fold :: Monoid m => FailT e f m -> m #

foldMap :: Monoid m => (a -> m) -> FailT e f a -> m #

foldMap' :: Monoid m => (a -> m) -> FailT e f a -> m #

foldr :: (a -> b -> b) -> b -> FailT e f a -> b #

foldr' :: (a -> b -> b) -> b -> FailT e f a -> b #

foldl :: (b -> a -> b) -> b -> FailT e f a -> b #

foldl' :: (b -> a -> b) -> b -> FailT e f a -> b #

foldr1 :: (a -> a -> a) -> FailT e f a -> a #

foldl1 :: (a -> a -> a) -> FailT e f a -> a #

toList :: FailT e f a -> [a] #

null :: FailT e f a -> Bool #

length :: FailT e f a -> Int #

elem :: Eq a => a -> FailT e f a -> Bool #

maximum :: Ord a => FailT e f a -> a #

minimum :: Ord a => FailT e f a -> a #

sum :: Num a => FailT e f a -> a #

product :: Num a => FailT e f a -> a #

(Eq e, Eq1 m) => Eq1 (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

liftEq :: (a -> b -> Bool) -> FailT e m a -> FailT e m b -> Bool #

(Ord e, Ord1 m) => Ord1 (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

liftCompare :: (a -> b -> Ordering) -> FailT e m a -> FailT e m b -> Ordering #

(Read e, Read1 m) => Read1 (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (FailT e m a) #

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [FailT e m a] #

liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (FailT e m a) #

liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [FailT e m a] #

(Show e, Show1 m) => Show1 (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> FailT e m a -> ShowS #

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [FailT e m a] -> ShowS #

Contravariant f => Contravariant (FailT e f) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

contramap :: (a' -> a) -> FailT e f a -> FailT e f a' #

(>$) :: b -> FailT e f b -> FailT e f a #

Traversable f => Traversable (FailT e f) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

traverse :: Applicative f0 => (a -> f0 b) -> FailT e f a -> f0 (FailT e f b) #

sequenceA :: Applicative f0 => FailT e f (f0 a) -> f0 (FailT e f a) #

mapM :: Monad m => (a -> m b) -> FailT e f a -> m (FailT e f b) #

sequence :: Monad m => FailT e f (m a) -> m (FailT e f a) #

Monad m => Alternative (FailT e m)

Short-circuits on the first successful operation, combines failures otherwise.

Instance details

Defined in Control.Monad.Trans.Fail

Methods

empty :: FailT e m a #

(<|>) :: FailT e m a -> FailT e m a -> FailT e m a #

some :: FailT e m a -> FailT e m [a] #

many :: FailT e m a -> FailT e m [a] #

Monad m => Applicative (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

pure :: a -> FailT e m a #

(<*>) :: FailT e m (a -> b) -> FailT e m a -> FailT e m b #

liftA2 :: (a -> b -> c) -> FailT e m a -> FailT e m b -> FailT e m c #

(*>) :: FailT e m a -> FailT e m b -> FailT e m b #

(<*) :: FailT e m a -> FailT e m b -> FailT e m a #

Functor m => Functor (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

fmap :: (a -> b) -> FailT e m a -> FailT e m b #

(<$) :: a -> FailT e m b -> FailT e m a #

Monad m => Monad (FailT e m)

Short-circuites on the first failing operation.

Instance details

Defined in Control.Monad.Trans.Fail

Methods

(>>=) :: FailT e m a -> (a -> FailT e m b) -> FailT e m b #

(>>) :: FailT e m a -> FailT e m b -> FailT e m b #

return :: a -> FailT e m a #

MonadThrow m => MonadThrow (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

throwM :: (HasCallStack, Exception e0) => e0 -> FailT e m a #

MonadCont m => MonadCont (FailT e m) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

callCC :: ((a -> FailT e m b) -> FailT e m a) -> FailT e m a #

(Monad m, Semigroup a) => Monoid (FailT e m a) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

mempty :: FailT e m a #

mappend :: FailT e m a -> FailT e m a -> FailT e m a #

mconcat :: [FailT e m a] -> FailT e m a #

(Monad m, Semigroup a) => Semigroup (FailT e m a)

Executes all monadic actions and combines all successful results using a Semigroup instance. Combines together all failures as well, until a successful operation.

Instance details

Defined in Control.Monad.Trans.Fail

Methods

(<>) :: FailT e m a -> FailT e m a -> FailT e m a #

sconcat :: NonEmpty (FailT e m a) -> FailT e m a #

stimes :: Integral b => b -> FailT e m a -> FailT e m a #

(Read e, Read1 m, Read a) => Read (FailT e m a) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

readsPrec :: Int -> ReadS (FailT e m a) #

readList :: ReadS [FailT e m a] #

readPrec :: ReadPrec (FailT e m a) #

readListPrec :: ReadPrec [FailT e m a] #

(Show e, Show1 m, Show a) => Show (FailT e m a) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

showsPrec :: Int -> FailT e m a -> ShowS #

show :: FailT e m a -> String #

showList :: [FailT e m a] -> ShowS #

(Eq e, Eq1 m, Eq a) => Eq (FailT e m a) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

(==) :: FailT e m a -> FailT e m a -> Bool #

(/=) :: FailT e m a -> FailT e m a -> Bool #

(Ord e, Ord1 m, Ord a) => Ord (FailT e m a) 
Instance details

Defined in Control.Monad.Trans.Fail

Methods

compare :: FailT e m a -> FailT e m a -> Ordering #

(<) :: FailT e m a -> FailT e m a -> Bool #

(<=) :: FailT e m a -> FailT e m a -> Bool #

(>) :: FailT e m a -> FailT e m a -> Bool #

(>=) :: FailT e m a -> FailT e m a -> Bool #

max :: FailT e m a -> FailT e m a -> FailT e m a #

min :: FailT e m a -> FailT e m a -> FailT e m a #