This package defines the type class @MonadControlIO@, a subset of
@MonadIO@ into which generic control operations such as @catch@ can
be lifted from @IO@. Instances are based on monad transformers in
@MonadTransControl@, which includes all standard monad transformers
in the @transformers@ library except @ContT@. For convenience, it
provides a wrapped version of @Control.Exception@ with types
generalized from @IO@ to all monads in @MonadControlIO@.
Note that this package is a rewrite of Anders Kaseorg's @monad-peel@ library.
The main difference is that this package provides CPS style
operators and exploits the @RankNTypes@ language extension to
simplify most definitions.
The package includes a copy of the @monad-peel@ testsuite written by Anders Kaseorg.
The tests can be performed by using @cabal test@.
The following @critertion@ based benchmark shows that @monad-control@
is on average about 2.5 times faster than @monad-peel@: