interruptible: Monad transformers that can be run and resumed later, conserving their context.
This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.
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 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 as inTransfomerCtx
and
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
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 the resume2
to resume5
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,
the 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.
Properties
Versions | 0.1.0.0, 0.1.1.0, 0.1.1.1, 0.1.1.1 |
---|---|
Change log | None available |
Dependencies | base (>=4.7 && <5), either, lifted-base, monad-control, transformers [details] |
License | BSD-3-Clause |
Author | Marcos Dumay de Medeiros |
Maintainer | marcos@marcosdumay.com |
Category | Control |
Home page | https://sealgram.com/git/haskell/interruptible/ |
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:47:55Z |
Modules
[Index]
- Control
Downloads
- interruptible-0.1.1.1.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
Package maintainers
For package maintainers and hackage trustees