@@ -1,6 +1,6 @@
11{-# LANGUAGE CPP #-}
22{-# LANGUAGE RankNTypes #-}
3−-- | Lift the @listen@ operation.
3+-- | Lifting the @listen@ operation.
44module Control.Monad.Trans.Lift.Listen
55 ( LiftListen(..)
66 , Listen
@@ -15,16 +15,22 @@ 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+
31+#if MIN_VERSION_transformers(0,5,3)
32+import qualified Control.Monad.Trans.Accum as Acc
33+#endif
2834
2935import Control.Monad.Trans.Lift.StT
3036
@@ -49,38 +55,66 @@ defaultLiftListen t unT listen m = t $ liftListen listen (unT m)
4955
5056instance LiftListen (E.ExceptT e) where
5157 liftListen = E.liftListen
58+ {-# INLINE liftListen #-}
5259
5360instance LiftListen I.IdentityT where
5461 liftListen = I.mapIdentityT
62+ {-# INLINE liftListen #-}
5563
5664instance LiftListen M.MaybeT where
5765 liftListen = M.liftListen
66+ {-# INLINE liftListen #-}
5867
5968instance LiftListen (R.ReaderT r) where
6069 liftListen = R.mapReaderT
70+ {-# INLINE liftListen #-}
6171
6272instance LiftListen (S.Lazy.StateT s) where
6373 liftListen = S.Lazy.liftListen
74+ {-# INLINE liftListen #-}
6475
6576instance LiftListen (S.Strict.StateT s) where
6677 liftListen = S.Strict.liftListen
78+ {-# INLINE liftListen #-}
6779
6880instance Monoid w' => LiftListen (RWS.Lazy.RWST r w' s) where
6981 liftListen listen m = RWS.Lazy.RWST $ \r s -> do
7082 ~((a, w', s'), w) <- listen (RWS.Lazy.runRWST m r s)
7183 return ((a, w), w', s')
84+ {-# INLINE liftListen #-}
7285
7386instance Monoid w' => LiftListen (RWS.Strict.RWST r w' s) where
7487 liftListen listen m = RWS.Strict.RWST $ \r s -> do
7588 ((a, w', s'), w) <- listen (RWS.Strict.runRWST m r s)
7689 return ((a, w), w', s')
90+ {-# INLINE liftListen #-}
91+
92+instance Monoid w' => LiftListen (RWS.CPS.RWST r w' s) where
93+ liftListen listen m = RWS.CPS.RWST $ \r w_ s -> do
94+ ((a, w', s'), w) <- listen (RWS.CPS.unRWST m r w_ s)
95+ return ((a, w), w', s')
96+ {-# INLINE liftListen #-}
7797
7898instance Monoid w' => LiftListen (W.Lazy.WriterT w') where
7999 liftListen listen m = W.Lazy.WriterT $ do
80100 ~((a, w'), w) <- listen (W.Lazy.runWriterT m)
81101 return ((a, w), w')
102+ {-# INLINE liftListen #-}
82103
83104instance Monoid w' => LiftListen (W.Strict.WriterT w') where
84105 liftListen listen m = W.Strict.WriterT $ do
85106 ((a, w'), w) <- listen (W.Strict.runWriterT m)
86107 return ((a, w), w')
108+ {-# INLINE liftListen #-}
109+
110+instance Monoid w' => LiftListen (W.CPS.WriterT w') where
111+ liftListen listen m = W.CPS.WriterT $ \w_ -> do
112+ ((a, w'), w) <- listen (W.CPS.unWriterT m w_)
113+ return ((a, w), w')
114+ {-# INLINE liftListen #-}
115+
116+#if MIN_VERSION_transformers(0,5,3)
117+instance Monoid w' => LiftListen (Acc.AccumT w') where
118+ liftListen = Acc.liftListen
119+ {-# INLINE liftListen #-}
120+#endif