@@ -1,5 +1,6 @@
11{-# LANGUAGE CPP #-}
22{-# LANGUAGE RankNTypes #-}
3+
34-- | Lifting the 'pass' operation.
45module Control.Monad.Trans.Lift.Pass
56 ( LiftPass(..)
@@ -15,16 +16,22 @@ import Data.Monoid
1516import Control.Monad.Signatures
1617import Control.Monad.Trans.Class
1718
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
19+import qualified Control.Monad.Trans.Except as E
20+import qualified Control.Monad.Trans.Identity as I
21+import qualified Control.Monad.Trans.Maybe as M
22+import 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
25+import qualified Control.Monad.Trans.RWS.CPS.Internal as RWS.CPS
26+import qualified Control.Monad.Trans.State.Lazy as S.Lazy
27+import qualified Control.Monad.Trans.State.Strict as S.Strict
28+import qualified Control.Monad.Trans.Writer.Lazy as W.Lazy
29+import qualified Control.Monad.Trans.Writer.Strict as W.Strict
30+import qualified Control.Monad.Trans.Writer.CPS.Internal as W.CPS
31+
32+#if MIN_VERSION_transformers(0,5,3)
33+import qualified Control.Monad.Trans.Accum as Acc
34+#endif
2835
2936import Control.Monad.Trans.Lift.StT
3037
@@ -50,38 +57,66 @@ defaultLiftPass t unT pass m = t $ liftPass pass (unT m)
5057
5158instance LiftPass (E.ExceptT e) where
5259 liftPass = E.liftPass
60+ {-# INLINE liftPass #-}
5361
5462instance LiftPass I.IdentityT where
5563 liftPass = I.mapIdentityT
64+ {-# INLINE liftPass #-}
5665
5766instance LiftPass M.MaybeT where
5867 liftPass = M.liftPass
68+ {-# INLINE liftPass #-}
5969
6070instance LiftPass (R.ReaderT r) where
6171 liftPass = R.mapReaderT
72+ {-# INLINE liftPass #-}
6273
6374instance LiftPass (S.Lazy.StateT s) where
6475 liftPass = S.Lazy.liftPass
76+ {-# INLINE liftPass #-}
6577
6678instance LiftPass (S.Strict.StateT s) where
6779 liftPass = S.Strict.liftPass
80+ {-# INLINE liftPass #-}
6881
6982instance Monoid w' => LiftPass (RWS.Lazy.RWST r w' s) where
7083 liftPass pass m = RWS.Lazy.RWST $ \r s -> pass $ do
7184 ~((a, f), w', s') <- RWS.Lazy.runRWST m r s
7285 return ((a, w', s'), f)
86+ {-# INLINE liftPass #-}
7387
7488instance Monoid w' => LiftPass (RWS.Strict.RWST r w' s) where
7589 liftPass pass m = RWS.Strict.RWST $ \r s -> pass $ do
7690 ((a, f), w', s') <- RWS.Strict.runRWST m r s
7791 return ((a, w', s'), f)
92+ {-# INLINE liftPass #-}
93+
94+instance Monoid w' => LiftPass (RWS.CPS.RWST r w' s) where
95+ liftPass pass m = RWS.CPS.RWST $ \r w_ s -> pass $ do
96+ ((a, f), w', s') <- RWS.CPS.unRWST m r w_ s
97+ return ((a, w', s'), f)
98+ {-# INLINE liftPass #-}
7899
79100instance Monoid w' => LiftPass (W.Lazy.WriterT w') where
80101 liftPass pass m = W.Lazy.WriterT $ pass $ do
81102 ~((a, f), w') <- W.Lazy.runWriterT m
82103 return ((a, w'), f)
104+ {-# INLINE liftPass #-}
83105
84106instance Monoid w' => LiftPass (W.Strict.WriterT w') where
85107 liftPass pass m = W.Strict.WriterT $ pass $ do
86108 ((a, f), w') <- W.Strict.runWriterT m
87109 return ((a, w'), f)
110+ {-# INLINE liftPass #-}
111+
112+instance Monoid w' => LiftPass (W.CPS.WriterT w') where
113+ liftPass pass m = W.CPS.WriterT $ \w_ -> pass $ do
114+ ((a, f), w') <- W.CPS.unWriterT m w_
115+ return ((a, w'), f)
116+ {-# INLINE liftPass #-}
117+
118+#if MIN_VERSION_transformers(0,5,3)
119+instance Monoid w' => LiftPass (Acc.AccumT w') where
120+ liftPass = Acc.liftPass
121+ {-# INLINE liftPass #-}
122+#endif