@@ -20,6 +20,8 @@ import qualified Control.Monad.Trans.Except as E
2020import qualified Control.Monad.Trans.Identity as I
2121import qualified Control.Monad.Trans.Maybe as M
2222import qualified Control.Monad.Trans.Reader as R
23+import qualified Control.Monad.Trans.RWS.Lazy as RWS.Lazy
24+import qualified Control.Monad.Trans.RWS.Strict as RWS.Strict
2325import qualified Control.Monad.Trans.State.Lazy as S.Lazy
2426import qualified Control.Monad.Trans.State.Strict as S.Strict
2527import qualified Control.Monad.Trans.Writer.Lazy as W.Lazy
@@ -56,12 +58,22 @@ instance LiftPass (S.Lazy.StateT s) where
5658instance LiftPass (S.Strict.StateT s) where
5759 liftPass = S.Strict.liftPass
5860
61+instance Monoid w' => LiftPass (RWS.Lazy.RWST r w' s) where
62+ liftPass pass m = RWS.Lazy.RWST $ \r s -> pass $ do
63+ ~((a, f), w', s') <- RWS.Lazy.runRWST m r s
64+ return ((a, w', s'), f)
65+
66+instance Monoid w' => LiftPass (RWS.Strict.RWST r w' s) where
67+ liftPass pass m = RWS.Strict.RWST $ \r s -> pass $ do
68+ ((a, f), w', s') <- RWS.Strict.runRWST m r s
69+ return ((a, w', s'), f)
70+
5971instance Monoid w' => LiftPass (W.Lazy.WriterT w') where
6072 liftPass pass m = W.Lazy.WriterT $ pass $ do
61− ~((a, f), w) <- W.Lazy.runWriterT m
62− return ((a, w), f)
73+ ~((a, f), w') <- W.Lazy.runWriterT m
74+ return ((a, w'), f)
6375
6476instance Monoid w' => LiftPass (W.Strict.WriterT w') where
6577 liftPass pass m = W.Strict.WriterT $ pass $ do
66− ((a, f), w) <- W.Strict.runWriterT m
67− return ((a, w), f)
78+ ((a, f), w') <- W.Strict.runWriterT m
79+ return ((a, w'), f)