-- Initial interruptible.cabal generated by cabal init. For further -- documentation, see http://haskell.org/cabal/users-guide/ name: interruptible version: 0.1.2.0 synopsis: Monad transformers that can be run and resumed later, conserving their context. description: This package provides the functionality needed to intercalate the execution of different transformers, and passing their state around as values for resuming later. Further explanations for where to use it is available at the sealgram blog: . The following is about how to use the package: . 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 > resume f c0 >>= > resume g . 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 > (resume . resume) f c0 >>= > (resume . resume) g > 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. homepage: https://sealgram.com/git/haskell/interruptible/ license: BSD3 license-file: LICENSE author: Marcos Dumay de Medeiros maintainer: marcos@marcosdumay.com --copyright: category: Control build-type: Simple -- extra-source-files: cabal-version: >=1.10 source-repository head type: git location: https://sealgram.com/git/haskell/interruptible/ branch: master source-repository this type: git location: https://sealgram.com/git/haskell/interruptible/ tag: 0.1.1.1 library exposed-modules: Control.Monad.Trans.Interruptible Control.Monad.Trans.SafeIO other-modules: Control.Monad.Trans.Interruptible.Class other-extensions: TypeFamilies build-depends: base >=4.7 && <5, transformers, monad-control, lifted-base, either hs-source-dirs: src default-language: Haskell2010 Test-suite all type: detailed-0.9 test-module: Test hs-source-dirs: test build-depends: base >=4.7 && <5.0, Cabal >= 1.9.2, either, transformers, interruptible ghc-options: -Wall -fno-warn-unused-do-bind -fwarn-incomplete-patterns -threaded default-language: Haskell2010