interruptible
Version 0.1.1.1 revision 0 uploaded by marcosdumay.
Package meta
- Synopsis
- Monad transformers that can be run and resumed later, conserving their context.
- Description
Given an inner monad
M
and a transformerT
, if T is an interruptible transformer, it becomes possible to intercalate functions over its context with functions over the inner monad. That is, code like this:runT (f 1 >>= g) where f :: Int -> T M a g :: a -> T M b
Can be broken up like this:
do let c0 = inTCtx 1 c1 <- resume f ct1 _ <- resume g ct2
That makes it possible to intercalate the execution of different contexts, and treat contexts like data, for iterating or returning them.
As shown on the example, interruptible transformers are resumed with the
resume
function. State may be managed by specialized functions usually named asinTransfomerCtx
andpeelTransformerCtx
that enclose a value in an initial context and retrieve the value from a context.Interruptible transformers can be stacked. On this case, they must be resumed with a composition of
resume
calls, and their contexts must be created and peeled on the inverse order that they appear on the stack. Like:do let c0 = inT2Ctx . inT1Ctx $ 1 c1 <- (resume . resume) f ct1 _ <- (resume . resume) g ct2 where f :: Monad m => Int -> T1 T2 M a g :: Monad m => a -> T1 T2 M b
For convenience, the
Interruptible
module exports theresume2
toresume5
functions as composotions of resume. They can be composed further as inresume7 = resume3 . resume4
if necessary.This package also contains the appliable instantiations of Interruptible for the mtl transformers, the
intercalateWith
function, that intercalates calls of a function through a list of contexts and parameters, and theSafeIO
module that lifts IOException treatment from the base monad into the current resumed context.- Author
- Marcos Dumay de Medeiros
- Bug reports
- n/a
- Category
- Control
- Copyright
- n/a
- Homepage
- https://sealgram.com/git/haskell/interruptible/
- Maintainer
- marcos@marcosdumay.com
- Package URL
- n/a
- Stability
- n/a