@hackage interruptible0.1.1.0

Monad transformers that can be run and resumed later, conserving their context.

Given an inner monad and a transformer: > (Monad m, MonadTrans t) If t is an interruptible transformer, it becomes possible to intercalate executions on the t context with executions over the inner monad m by breaking the execution on t and resuming it later.

Interruptible monads implement the runI function so that, given 'f :: a -> t m b' and 'g :: b -> t m c', 'resume (f >>= g)' is equivalent to 'x -> resume f x >>= resume g'.

That makes it possible to intercalate the execution of different monads, and even to return a monadic context for another function to resume it.