| Safe Haskell | None | 
|---|---|
| Language | Haskell2010 | 
Capability.Derive
Synopsis
- derive :: forall t (derived :: [Capability]) (ambient :: [Capability]) m a. (forall x. Coercible (t m x) (m x), All derived (t m), All ambient m) => (forall m'. (All derived m', All ambient m') => m' a) -> m a
Documentation
derive :: forall t (derived :: [Capability]) (ambient :: [Capability]) m a. (forall x. Coercible (t m x) (m x), All derived (t m), All ambient m) => (forall m'. (All derived m', All ambient m') => m' a) -> m a Source #
Runs an action that requires additional capabilities.
derive @t @derived @ambient actact by providing both the
 capabilities in derived and ambient. The difference is that ambient
 capabilities are assumed to be available, whereas derived instances are
 provided by t.
derive assumes that t is a newtype defined in the form:
newtype T m a = T (m a)
Then derive uses type-class instances for T to provide for each of the
 capabilities in derived.
A common instance of this is wrapError, whereby exceptions
 raised by act can be repackaged in a larger exception type.
The derive function is experimental and is subject to change.