The interruptible package

[ Tags: bsd3, control, library ] [ Propose Tags ]

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)
    f :: Int -> T M a
    g :: a -> T M b

Can be broken up like this:

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 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:

let c0 = inT2Ctx . inT1Ctx $ 1
c1 <- (resume . resume) f c0
_ <- (resume . resume) g c1
    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.


Dependencies base (>=4.7 && <5), either, lifted-base, monad-control, transformers [details]
License BSD3
Author Marcos Dumay de Medeiros
Category Control
Home page
Source repository head: git clone -b master
this: git clone
Uploaded Wed Jun 8 20:48:18 UTC 2016 by marcosdumay
Updated Sat Jul 9 14:51:03 UTC 2016 by marcosdumay to revision 2   [What is this?]
Distributions NixOS:
Downloads 313 total (145 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]
Hackage Matrix CI




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'.

Maintainer's Corner

For package maintainers and hackage trustees