{-| 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. -} module Control.Proxy.Trans ( -- * Proxy Transformers ProxyTrans(..), -- * Deprecated -- $deprecate mapP ) where import Control.Proxy.Class (Proxy) -- | Uniform interface to lifting proxies class ProxyTrans t where liftP :: (Monad m, Proxy p) => p a' a b' b m r -> t p a' a b' b m r {- $deprecate To be removed in version @4.0.0@ -} mapP :: (Monad m, Proxy p, ProxyTrans t) => (q -> p a' a b' b m r) -> (q -> t p a' a b' b m r) mapP = (liftP .) {-# INLINABLE mapP #-} {-# DEPRECATED mapP "Use '(liftP .)' instead" #-}