@@ -15,16 +15,19 @@ import Data.Monoid
1515import Control.Monad.Signatures
1616import Control.Monad.Trans.Class
1717
18−import qualified Control.Monad.Trans.Except as E
19−import qualified Control.Monad.Trans.Identity as I
20−import qualified Control.Monad.Trans.Maybe as M
21−import qualified Control.Monad.Trans.Reader as R
22−import qualified Control.Monad.Trans.RWS.Lazy as RWS.Lazy
23−import qualified Control.Monad.Trans.RWS.Strict as RWS.Strict
24−import qualified Control.Monad.Trans.State.Lazy as S.Lazy
25−import qualified Control.Monad.Trans.State.Strict as S.Strict
26−import qualified Control.Monad.Trans.Writer.Lazy as W.Lazy
27−import qualified Control.Monad.Trans.Writer.Strict as W.Strict
18+import qualified Control.Monad.Trans.Except as E
19+import qualified Control.Monad.Trans.Identity as I
20+import qualified Control.Monad.Trans.Maybe as M
21+import qualified Control.Monad.Trans.Reader as R
22+import qualified Control.Monad.Trans.RWS.Lazy as RWS.Lazy
23+import qualified Control.Monad.Trans.RWS.Strict as RWS.Strict
24+import qualified Control.Monad.Trans.RWS.CPS.Internal as RWS.CPS
25+import qualified Control.Monad.Trans.State.Lazy as S.Lazy
26+import qualified Control.Monad.Trans.State.Strict as S.Strict
27+import qualified Control.Monad.Trans.Writer.Lazy as W.Lazy
28+import qualified Control.Monad.Trans.Writer.Strict as W.Strict
29+import qualified Control.Monad.Trans.Writer.CPS.Internal as W.CPS
30+import qualified Control.Monad.Trans.Accum as Acc
2831
2932import Control.Monad.Trans.Lift.StT
3033
@@ -49,38 +52,64 @@ defaultLiftListen t unT listen m = t $ liftListen listen (unT m)
4952
5053instance LiftListen (E.ExceptT e) where
5154 liftListen = E.liftListen
55+ {-# INLINE liftListen #-}
5256
5357instance LiftListen I.IdentityT where
5458 liftListen = I.mapIdentityT
59+ {-# INLINE liftListen #-}
5560
5661instance LiftListen M.MaybeT where
5762 liftListen = M.liftListen
63+ {-# INLINE liftListen #-}
5864
5965instance LiftListen (R.ReaderT r) where
6066 liftListen = R.mapReaderT
67+ {-# INLINE liftListen #-}
6168
6269instance LiftListen (S.Lazy.StateT s) where
6370 liftListen = S.Lazy.liftListen
71+ {-# INLINE liftListen #-}
6472
6573instance LiftListen (S.Strict.StateT s) where
6674 liftListen = S.Strict.liftListen
75+ {-# INLINE liftListen #-}
6776
6877instance Monoid w' => LiftListen (RWS.Lazy.RWST r w' s) where
6978 liftListen listen m = RWS.Lazy.RWST $ \r s -> do
7079 ~((a, w', s'), w) <- listen (RWS.Lazy.runRWST m r s)
7180 return ((a, w), w', s')
81+ {-# INLINE liftListen #-}
7282
7383instance Monoid w' => LiftListen (RWS.Strict.RWST r w' s) where
7484 liftListen listen m = RWS.Strict.RWST $ \r s -> do
7585 ((a, w', s'), w) <- listen (RWS.Strict.runRWST m r s)
7686 return ((a, w), w', s')
87+ {-# INLINE liftListen #-}
88+
89+instance Monoid w' => LiftListen (RWS.CPS.RWST r w' s) where
90+ liftListen listen m = RWS.CPS.RWST $ \r w_ s -> do
91+ ((a, w', s'), w) <- listen (RWS.CPS.unRWST m r w_ s)
92+ return ((a, w), w', s')
93+ {-# INLINE liftListen #-}
7794
7895instance Monoid w' => LiftListen (W.Lazy.WriterT w') where
7996 liftListen listen m = W.Lazy.WriterT $ do
8097 ~((a, w'), w) <- listen (W.Lazy.runWriterT m)
8198 return ((a, w), w')
99+ {-# INLINE liftListen #-}
82100
83101instance Monoid w' => LiftListen (W.Strict.WriterT w') where
84102 liftListen listen m = W.Strict.WriterT $ do
85103 ((a, w'), w) <- listen (W.Strict.runWriterT m)
86104 return ((a, w), w')
105+ {-# INLINE liftListen #-}
106+
107+instance Monoid w' => LiftListen (W.CPS.WriterT w') where
108+ liftListen listen m = W.CPS.WriterT $ \w_ -> do
109+ ((a, w'), w) <- listen (W.CPS.unWriterT m w_)
110+ return ((a, w), w')
111+ {-# INLINE liftListen #-}
112+
113+instance Monoid w' => LiftListen (Acc.AccumT w') where
114+ liftListen = Acc.liftListen
115+ {-# INLINE liftListen #-}