Safe Haskell | Safe |
---|---|
Language | Haskell98 |
You can define your own proxy extensions by writing your own "proxy transformers". Proxy transformers are monad transformers that also correctly lift all proxy operations from the base proxy type to the extended proxy type. Stack multiple proxy transformers to chain features together.
- class ProxyTrans t where
- mapP :: (Monad m, Proxy p, ProxyTrans t) => (q -> p a' a b' b m r) -> q -> t p a' a b' b m r
Proxy Transformers
class ProxyTrans t where Source #
Uniform interface to lifting proxies
ProxyTrans IdentityP Source # | |
ProxyTrans MaybeP Source # | |
ProxyTrans (EitherP e) Source # | |
ProxyTrans (ReaderP i) Source # | |
ProxyTrans (StateP s) Source # | |
ProxyTrans (WriterP w) Source # | |
mapP :: (Monad m, Proxy p, ProxyTrans t) => (q -> p a' a b' b m r) -> q -> t p a' a b' b m r Source #
Lift a Proxy
Kleisli arrow
mapP = (lift .)
Laws
mapP
defines a functor that preserves five categories:
- Kleisli category
- The two Proxy categories
- "request" category
- "respond" category
Laws:
- Functor between
Proxy
categories
mapP (f >-> g) = mapP f >-> mapP g mapP idT = idT
mapP (f >~> g) = mapP f >~> mapP g mapP idPush = idPush
- Functor between Kleisli categories
mapP (f <=< g) = mapP f <=< mapP g mapP return = return
- Functor between "request" categories
mapP (f /</ g) = mapP f /</ mapP g -- when /</ is defined mapP request = request
- Functor between "respond" categories
mapP (f \<\ g) = mapP f \<\ mapP g -- when \<\ is defined mapP respond = respond