module Control.Monad.Trans.Abort.Instances.MonadsTF 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 r m) where
callCC = liftCallCC callCC
instance MonadError m => MonadError (AbortT r m) where
type ErrorType (AbortT r m) = ErrorType m
throwError = lift . throwError
catchError = liftCatch catchError
instance MonadReader m => MonadReader (AbortT r m) where
type EnvType (AbortT r m) = EnvType m
ask = lift ask
local f = AbortT . local f . unwrapAbortT
instance MonadWriter m => MonadWriter (AbortT r m) where
type WriterType (AbortT r m) = WriterType m
tell = lift . tell
listen = liftListen listen
pass = liftPass pass
instance MonadState m => MonadState (AbortT r m) where
type StateType (AbortT r m) = StateType m
get = lift get
put = lift . put
instance MonadRWS m => MonadRWS (AbortT r m)