module Control.Monad.Trans.Abort.Instances.MTL where
import Control.Monad.Cont.Class (MonadCont(..))
import Control.Monad.Error.Class (MonadError(..))
import Control.Monad.RWS.Class (MonadRWS(..))
import Control.Monad.Reader.Class (MonadReader(..))
import Control.Monad.Trans (lift)
import Control.Monad.Trans.Abort
import Control.Monad.State.Class (MonadState(..))
import Control.Monad.Writer.Class (MonadWriter(..))
instance MonadCont m => MonadCont (AbortT a m) where
callCC = liftCallCC callCC
instance MonadError e m => MonadError e (AbortT a m) where
throwError = lift . throwError
catchError = liftCatch catchError
instance MonadReader r m => MonadReader r (AbortT a m) where
ask = lift ask
local f = AbortT . local f . unwrapAbortT
instance MonadWriter w m => MonadWriter w (AbortT a m) where
tell = lift . tell
listen = liftListen listen
pass = liftPass pass
instance MonadState s m => MonadState s (AbortT a m) where
get = lift get
put = lift . put
instance MonadRWS r w s m => MonadRWS r w s (AbortT a m)