@@ -15,16 +15,19 @@ import Data.Monoid
15import Control.Monad.Signatures
15import Control.Monad.Signatures
16import Control.Monad.Trans.Class
16import Control.Monad.Trans.Class
18−import qualified Control.Monad.Trans.Except as E
18+import qualified Control.Monad.Trans.Except as E
19−import qualified Control.Monad.Trans.Identity as I
19+import qualified Control.Monad.Trans.Identity as I
20−import qualified Control.Monad.Trans.Maybe as M
20+import qualified Control.Monad.Trans.Maybe as M
21−import qualified Control.Monad.Trans.Reader as R
21+import qualified Control.Monad.Trans.Reader as R
22−import qualified Control.Monad.Trans.RWS.Lazy as RWS.Lazy
22+import qualified Control.Monad.Trans.RWS.Lazy as RWS.Lazy
23−import qualified Control.Monad.Trans.RWS.Strict as RWS.Strict
23+import qualified Control.Monad.Trans.RWS.Strict as RWS.Strict
24+import qualified Control.Monad.Trans.RWS.CPS.Internal as RWS.CPS
24−import qualified Control.Monad.Trans.State.Lazy as S.Lazy
25+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.State.Strict as S.Strict
26−import qualified Control.Monad.Trans.Writer.Lazy as W.Lazy
27+import qualified Control.Monad.Trans.Writer.Lazy as W.Lazy
27−import qualified Control.Monad.Trans.Writer.Strict as W.Strict
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
29import Control.Monad.Trans.Lift.StT
32import Control.Monad.Trans.Lift.StT
@@ -49,38 +52,64 @@ defaultLiftListen t unT listen m = t $ liftListen listen (unT m)
50instance LiftListen (E.ExceptT e) where
53instance LiftListen (E.ExceptT e) where
51 liftListen = E.liftListen
54 liftListen = E.liftListen
55+ {-# INLINE liftListen #-}
53instance LiftListen I.IdentityT where
57instance LiftListen I.IdentityT where
54 liftListen = I.mapIdentityT
58 liftListen = I.mapIdentityT
59+ {-# INLINE liftListen #-}
56instance LiftListen M.MaybeT where
61instance LiftListen M.MaybeT where
57 liftListen = M.liftListen
62 liftListen = M.liftListen
63+ {-# INLINE liftListen #-}
59instance LiftListen (R.ReaderT r) where
65instance LiftListen (R.ReaderT r) where
60 liftListen = R.mapReaderT
66 liftListen = R.mapReaderT
67+ {-# INLINE liftListen #-}
62instance LiftListen (S.Lazy.StateT s) where
69instance LiftListen (S.Lazy.StateT s) where
63 liftListen = S.Lazy.liftListen
70 liftListen = S.Lazy.liftListen
71+ {-# INLINE liftListen #-}
65instance LiftListen (S.Strict.StateT s) where
73instance LiftListen (S.Strict.StateT s) where
66 liftListen = S.Strict.liftListen
74 liftListen = S.Strict.liftListen
75+ {-# INLINE liftListen #-}
68instance Monoid w' => LiftListen (RWS.Lazy.RWST r w' s) where
77instance Monoid w' => LiftListen (RWS.Lazy.RWST r w' s) where
69 liftListen listen m = RWS.Lazy.RWST $ \r s -> do
78 liftListen listen m = RWS.Lazy.RWST $ \r s -> do
70 ~((a, w', s'), w) <- listen (RWS.Lazy.runRWST m r s)
79 ~((a, w', s'), w) <- listen (RWS.Lazy.runRWST m r s)
71 return ((a, w), w', s')
80 return ((a, w), w', s')
81+ {-# INLINE liftListen #-}
73instance Monoid w' => LiftListen (RWS.Strict.RWST r w' s) where
83instance Monoid w' => LiftListen (RWS.Strict.RWST r w' s) where
74 liftListen listen m = RWS.Strict.RWST $ \r s -> do
84 liftListen listen m = RWS.Strict.RWST $ \r s -> do
75 ((a, w', s'), w) <- listen (RWS.Strict.runRWST m r s)
85 ((a, w', s'), w) <- listen (RWS.Strict.runRWST m r s)
76 return ((a, w), w', s')
86 return ((a, w), w', s')
87+ {-# INLINE liftListen #-}
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 #-}
78instance Monoid w' => LiftListen (W.Lazy.WriterT w') where
95instance Monoid w' => LiftListen (W.Lazy.WriterT w') where
79 liftListen listen m = W.Lazy.WriterT $ do
96 liftListen listen m = W.Lazy.WriterT $ do
80 ~((a, w'), w) <- listen (W.Lazy.runWriterT m)
97 ~((a, w'), w) <- listen (W.Lazy.runWriterT m)
81 return ((a, w), w')
98 return ((a, w), w')
99+ {-# INLINE liftListen #-}
83instance Monoid w' => LiftListen (W.Strict.WriterT w') where
101instance Monoid w' => LiftListen (W.Strict.WriterT w') where
84 liftListen listen m = W.Strict.WriterT $ do
102 liftListen listen m = W.Strict.WriterT $ do
85 ((a, w'), w) <- listen (W.Strict.runWriterT m)
103 ((a, w'), w) <- listen (W.Strict.runWriterT m)
86 return ((a, w), w')
104 return ((a, w), w')
105+ {-# INLINE liftListen #-}
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_)
111+ {-# INLINE liftListen #-}
113+instance Monoid w' => LiftListen (Acc.AccumT w') where
114+ liftListen = Acc.liftListen
115+ {-# INLINE liftListen #-}