123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- -- 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:
- <https://sealgram.com/blog/interruptible-monad-transformers.html>. 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
|