module Control.Monad.RWS.CPS (
RWS,
rws,
runRWS,
evalRWS,
execRWS,
mapRWS,
withRWS,
RWST,
rwsT,
runRWST,
evalRWST,
execRWST,
mapRWST,
withRWST,
module X
) where
import Control.Monad as X
import Control.Monad.Fix as X
import Control.Monad.RWS.Class as X
import Control.Monad.Trans as X
import Data.Monoid as X
import Control.Monad.Cont.Class
import Control.Monad.Error.Class
import Control.Monad.Trans.RWS.CPS
import qualified Control.Monad.Trans.RWS.CPS as CPS
instance (Monoid w, Monad m) => MonadWriter w (RWST r w s m) where
writer = CPS.writer
tell = CPS.tell
listen = CPS.listen
pass = CPS.pass
instance Monad m => MonadReader r (RWST r w s m) where
ask = CPS.ask
local = CPS.local
reader = CPS.reader
instance Monad m => MonadState s (RWST r w s m) where
get = CPS.get
put = CPS.put
state = CPS.state
instance (Monad m, Monoid w) => MonadRWS r w s (RWST r w s m)
instance MonadError e m => MonadError e (RWST r w s m) where
throwError = lift . throwError
catchError = CPS.liftCatch catchError
instance MonadCont m => MonadCont (RWST r w s m) where
callCC = CPS.liftCallCC' callCC