In Haskell you very often acquire values using the 'with...' idiom using
functions of type '(a -> IO r) -> IO r'. This idiom forms a 'Monad', which is a
special case of the 'ContT' monad (from 'transformers') or the 'Codensity'
monad (from 'kan-extensions'). The main purpose behind this package is to
provide a restricted form of these monads specialized to this unusually common
case.
The reason this package defines a specialized version of these types is to:
* be more beginner-friendly,
* simplify inferred types and error messages, and:
* provide some additional type class instances that would otherwise be orphan
instances.