git.iko.soy/typeable/transformers-lift
on master help sign in
LiftPass for RWST
commit59c1c8b4805a5745ed6b944288fbaf68077c1f2b authorIndex Int <vlad.z.4096@gmail.com> dateSat 11 Jul 2015, 18:55 (11 years ago) parent46bd407
2 files changed+20−8
src/Control/Monad/Trans/Lift/Listen.hs+4−4 src/Control/Monad/Trans/Lift/Pass.hs+16−4
src/Control/Monad/Trans/Lift/Listen.hs+4−4
@@ -57,22 +57,22 @@ instance LiftListen (S.Lazy.StateT s) where
5757instance LiftListen (S.Strict.StateT s) where
5858 liftListen = S.Strict.liftListen
5959
60−instance Monoid w => LiftListen (RWS.Lazy.RWST r w s) where
60+instance Monoid w' => LiftListen (RWS.Lazy.RWST r w' s) where
6161 liftListen listen m = RWS.Lazy.RWST $ \r s -> do
6262 ((a, w', s'), w) <- listen (RWS.Lazy.runRWST m r s)
6363 return ((a, w), w', s')
6464
65−instance Monoid w => LiftListen (RWS.Strict.RWST r w s) where
65+instance Monoid w' => LiftListen (RWS.Strict.RWST r w' s) where
6666 liftListen listen m = RWS.Strict.RWST $ \r s -> do
6767 ((a, w', s'), w) <- listen (RWS.Strict.runRWST m r s)
6868 return ((a, w), w', s')
6969
70−instance Monoid w => LiftListen (W.Lazy.WriterT w) where
70+instance Monoid w' => LiftListen (W.Lazy.WriterT w') where
7171 liftListen listen m = W.Lazy.WriterT $ do
7272 ~((a, w'), w) <- listen (W.Lazy.runWriterT m)
7373 return ((a, w), w')
7474
75−instance Monoid w => LiftListen (W.Strict.WriterT w) where
75+instance Monoid w' => LiftListen (W.Strict.WriterT w') where
7676 liftListen listen m = W.Strict.WriterT $ do
7777 ((a, w'), w) <- listen (W.Strict.runWriterT m)
7878 return ((a, w), w')
src/Control/Monad/Trans/Lift/Pass.hs+16−4
@@ -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)