interruptible: Monad transformers that can be run and resumed later, conserving their context.
Given an inner monad
M and a transformer
T, 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 c0 _ <- resume g c2
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
State may be managed by specialized functions usually named as
peelTransformerCtx 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
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 c0 _ <- (resume . resume) g c1 where f :: Monad m => Int -> T1 T2 M a g :: Monad m => a -> T1 T2 M b
For convenience, the
Interruptible module exports the
functions as composotions of resume. They can be composed further as in
resume7 = resume3 . resume4 if necessary.
This package also contains the appliable instantiations of Interruptible for the mtl transformers,
intercalateWith function, that intercalates calls of a function through a list
of contexts and parameters, and the
SafeIO module that lifts IOException treatment from the
base monad into the current resumed context.
- interruptible-0.1.1.1.tar.gz [browse] (Cabal source package)
- Package description (revised from the package)
Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.
For package maintainers and hackage trustees
|Versions [RSS]||0.1.0.0, 0.1.1.0, 0.1.1.1|
|Dependencies||base (>=4.7 && <5), either, lifted-base, monad-control, transformers [details]|
|Author||Marcos Dumay de Medeiros|
|Revised||Revision 2 made by marcosdumay at 2016-07-09T14:51:03Z|
|Source repo||head: git clone https://sealgram.com/git/haskell/interruptible/ -b master
this: git clone https://sealgram.com/git/haskell/interruptible/(tag 0.1.1.1)
|Uploaded||by marcosdumay at 2016-06-08T20:48:18Z|
|Reverse Dependencies||1 direct, 1 indirect [details]|
|Downloads||2329 total (7 in the last 30 days)|
|Rating||(no votes yet) [estimated by Bayesian average]|
|Status||Docs uploaded by user
Build status unknown [no reports yet]