git.iko.soy/typeable/transformers-lift
on master help sign in
13 files changed+256−42
since splitsnapshots
unifiedsplit
.gitignore+1 .travis.yml+24−10 LICENSE+2−2 README.md+2−1 src/Control/Monad/Trans/Lift/CallCC.hs+36 src/Control/Monad/Trans/Lift/Catch.hs+31 src/Control/Monad/Trans/Lift/Listen.hs+44−10 src/Control/Monad/Trans/Lift/Local.hs+32 src/Control/Monad/Trans/Lift/Pass.hs+45−10 src/Control/Monad/Trans/Lift/StT.hs+15−1 stack-7.8.3.yaml+7 stack.yaml+4 transformers-lift.cabal+13−8
.gitignore+1
@@ -1,3 +1,4 @@
11dist
2+.stack-work
23.cabal-sandbox/
34cabal.sandbox.config
.travis.yml+24−10
@@ -1,21 +1,35 @@
1+sudo: false
2+
13env:
2− - CABALVER=1.18 GHCVER=7.6.3
3− - CABALVER=1.18 GHCVER=7.8.4
4− - CABALVER=1.22 GHCVER=7.10.2
4+ - CABALVER=3.0 GHCVER=7.10.3
5+ - CABALVER=3.0 GHCVER=8.0.2
6+ - CABALVER=3.0 GHCVER=8.2.2
7+ - CABALVER=3.0 GHCVER=8.4.4
8+ - CABALVER=3.0 GHCVER=8.6.1
59 - CABALVER=head GHCVER=head
610
711before_install:
8− - travis_retry sudo add-apt-repository -y ppa:hvr/ghc
9− - travis_retry sudo apt-get update
10− - travis_retry sudo apt-get install cabal-install-$CABALVER ghc-$GHCVER
1112 - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH
13+ - ghc --version
14+ - cabal --version
1215 - travis_retry cabal update
1316
1417install:
15− - cabal --version
16− - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"
17− - cabal install --only-dependencies
18+ - cabal install --dep
1819
1920script:
20− - cabal configure --enable-tests -v2
2121 - cabal build
22+
23+addons:
24+ apt:
25+ sources:
26+ - hvr-ghc
27+ packages:
28+ - ghc-7.10.3
29+ - ghc-8.0.2
30+ - ghc-8.2.2
31+ - ghc-8.4.4
32+ - ghc-8.6.1
33+ - ghc-head
34+ - cabal-install-3.0
35+ - cabal-install-head
LICENSE+2−2
@@ -1,4 +1,4 @@
1−Copyright (c) 2015, Index Int
1+Copyright (c) 2015, Vladislav Zavialov
22
33All rights reserved.
44
@@ -13,7 +13,7 @@ modification, are permitted provided that the following conditions are met:
1313 disclaimer in the documentation and/or other materials provided
1414 with the distribution.
1515
16− * Neither the name of Index Int nor the names of other
16+ * Neither the name of Vladislav Zavialov nor the names of other
1717 contributors may be used to endorse or promote products derived
1818 from this software without specific prior written permission.
1919
README.md+2−1
@@ -1,4 +1,5 @@
11[![Build Status](https://img.shields.io/travis/int-index/transformers-lift.svg)](https://travis-ci.org/int-index/transformers-lift)
2+[![Hackage](https://img.shields.io/hackage/v/transformers-lift.svg)](https://hackage.haskell.org/package/transformers-lift)
23
34`transformers-lift` is a simple and lightweight library that provides type
4−classes for lifting monad transformers operations.
5+classes for lifting operations through monad transformers.
src/Control/Monad/Trans/Lift/CallCC.hs+36
@@ -23,10 +23,16 @@ import qualified Control.Monad.Trans.Maybe as M
2323import qualified Control.Monad.Trans.Reader as R
2424import qualified Control.Monad.Trans.RWS.Lazy as RWS.Lazy
2525import qualified Control.Monad.Trans.RWS.Strict as RWS.Strict
26+import qualified Control.Monad.Trans.RWS.CPS as RWS.CPS
2627import qualified Control.Monad.Trans.State.Lazy as S.Lazy
2728import qualified Control.Monad.Trans.State.Strict as S.Strict
2829import qualified Control.Monad.Trans.Writer.Lazy as W.Lazy
2930import qualified Control.Monad.Trans.Writer.Strict as W.Strict
31+import qualified Control.Monad.Trans.Writer.CPS as W.CPS
32+
33+#if MIN_VERSION_transformers(0,5,3)
34+import qualified Control.Monad.Trans.Accum as Acc
35+#endif
3036
3137import Control.Monad.Trans.Lift.StT
3238
@@ -73,38 +79,68 @@ defaultLiftCallCC' t unT callCC f
7379
7480instance LiftCallCC (E.ExceptT e) where
7581 liftCallCC = E.liftCallCC
82+ {-# INLINE liftCallCC #-}
7683
7784instance LiftCallCC I.IdentityT where
7885 liftCallCC = I.liftCallCC
86+ {-# INLINE liftCallCC #-}
7987
8088instance LiftCallCC L.ListT where
8189 liftCallCC = L.liftCallCC
90+ {-# INLINE liftCallCC #-}
8291
8392instance LiftCallCC M.MaybeT where
8493 liftCallCC = M.liftCallCC
94+ {-# INLINE liftCallCC #-}
8595
8696instance LiftCallCC (R.ReaderT r) where
8797 liftCallCC = R.liftCallCC
98+ {-# INLINE liftCallCC #-}
8899
89100instance Monoid w => LiftCallCC (W.Lazy.WriterT w) where
90101 liftCallCC = W.Lazy.liftCallCC
102+ {-# INLINE liftCallCC #-}
91103
92104instance Monoid w => LiftCallCC (W.Strict.WriterT w) where
93105 liftCallCC = W.Strict.liftCallCC
106+ {-# INLINE liftCallCC #-}
107+
108+instance Monoid w => LiftCallCC (W.CPS.WriterT w) where
109+ liftCallCC = W.CPS.liftCallCC
110+ {-# INLINE liftCallCC #-}
94111
95112instance Monoid w => LiftCallCC (RWS.Lazy.RWST r w s) where
96113 liftCallCC = RWS.Lazy.liftCallCC
114+ {-# INLINE liftCallCC #-}
97115 liftCallCC' = RWS.Lazy.liftCallCC'
116+ {-# INLINE liftCallCC' #-}
98117
99118instance Monoid w => LiftCallCC (RWS.Strict.RWST r w s) where
100119 liftCallCC = RWS.Strict.liftCallCC
120+ {-# INLINE liftCallCC #-}
101121 liftCallCC' = RWS.Strict.liftCallCC'
122+ {-# INLINE liftCallCC' #-}
123+
124+instance Monoid w => LiftCallCC (RWS.CPS.RWST r w s) where
125+ liftCallCC = RWS.CPS.liftCallCC
126+ {-# INLINE liftCallCC #-}
127+ liftCallCC' = RWS.CPS.liftCallCC'
128+ {-# INLINE liftCallCC' #-}
102129
103130instance LiftCallCC (S.Lazy.StateT s) where
104131 liftCallCC = S.Lazy.liftCallCC
132+ {-# INLINE liftCallCC #-}
105133 liftCallCC' = S.Lazy.liftCallCC'
134+ {-# INLINE liftCallCC' #-}
106135
107136instance LiftCallCC (S.Strict.StateT s) where
108137 liftCallCC = S.Strict.liftCallCC
138+ {-# INLINE liftCallCC #-}
109139 liftCallCC' = S.Strict.liftCallCC'
140+ {-# INLINE liftCallCC' #-}
110141
142+#if MIN_VERSION_transformers(0,5,3)
143+instance Monoid w => LiftCallCC (Acc.AccumT w) where
144+ liftCallCC = Acc.liftCallCC
145+ {-# INLINE liftCallCC #-}
146+#endif
src/Control/Monad/Trans/Lift/Catch.hs+31
@@ -22,10 +22,16 @@ import qualified Control.Monad.Trans.Maybe as M
2222import qualified Control.Monad.Trans.Reader as R
2323import qualified Control.Monad.Trans.RWS.Lazy as RWS.Lazy
2424import qualified Control.Monad.Trans.RWS.Strict as RWS.Strict
25+import qualified Control.Monad.Trans.RWS.CPS as RWS.CPS
2526import qualified Control.Monad.Trans.State.Lazy as S.Lazy
2627import qualified Control.Monad.Trans.State.Strict as S.Strict
2728import qualified Control.Monad.Trans.Writer.Lazy as W.Lazy
2829import qualified Control.Monad.Trans.Writer.Strict as W.Strict
30+import qualified Control.Monad.Trans.Writer.CPS as W.CPS
31+
32+#if MIN_VERSION_transformers(0,5,3)
33+import qualified Control.Monad.Trans.Accum as Acc
34+#endif
2935
3036import Control.Monad.Trans.Lift.StT
3137
@@ -50,33 +56,58 @@ defaultLiftCatch t unT f m h = t $ liftCatch f (unT m) (unT . h)
5056
5157instance LiftCatch (E.ExceptT e) where
5258 liftCatch f m h = E.ExceptT $ f (E.runExceptT m) (E.runExceptT . h)
59+ {-# INLINE liftCatch #-}
5360
5461instance LiftCatch I.IdentityT where
5562 liftCatch = I.liftCatch
63+ {-# INLINE liftCatch #-}
5664
5765instance LiftCatch L.ListT where
5866 liftCatch = L.liftCatch
67+ {-# INLINE liftCatch #-}
5968
6069instance LiftCatch M.MaybeT where
6170 liftCatch = M.liftCatch
71+ {-# INLINE liftCatch #-}
6272
6373instance LiftCatch (R.ReaderT r) where
6474 liftCatch = R.liftCatch
75+ {-# INLINE liftCatch #-}
6576
6677instance Monoid w => LiftCatch (RWS.Lazy.RWST r w s) where
6778 liftCatch = RWS.Lazy.liftCatch
79+ {-# INLINE liftCatch #-}
6880
6981instance Monoid w => LiftCatch (RWS.Strict.RWST r w s) where
7082 liftCatch = RWS.Strict.liftCatch
83+ {-# INLINE liftCatch #-}
84+
85+instance Monoid w => LiftCatch (RWS.CPS.RWST r w s) where
86+ liftCatch = RWS.CPS.liftCatch
87+ {-# INLINE liftCatch #-}
7188
7289instance LiftCatch (S.Lazy.StateT s) where
7390 liftCatch = S.Lazy.liftCatch
91+ {-# INLINE liftCatch #-}
7492
7593instance LiftCatch (S.Strict.StateT s) where
7694 liftCatch = S.Strict.liftCatch
95+ {-# INLINE liftCatch #-}
7796
7897instance Monoid w => LiftCatch (W.Lazy.WriterT w) where
7998 liftCatch = W.Lazy.liftCatch
99+ {-# INLINE liftCatch #-}
80100
81101instance Monoid w => LiftCatch (W.Strict.WriterT w) where
82102 liftCatch = W.Strict.liftCatch
103+ {-# INLINE liftCatch #-}
104+
105+instance Monoid w => LiftCatch (W.CPS.WriterT w) where
106+ liftCatch = W.CPS.liftCatch
107+ {-# INLINE liftCatch #-}
108+
109+#if MIN_VERSION_transformers(0,5,3)
110+instance Monoid w => LiftCatch (Acc.AccumT w) where
111+ liftCatch = Acc.liftCatch
112+ {-# INLINE liftCatch #-}
113+#endif
src/Control/Monad/Trans/Lift/Listen.hs+44−10
@@ -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
src/Control/Monad/Trans/Lift/Local.hs+32
@@ -22,10 +22,16 @@ import qualified Control.Monad.Trans.Maybe as M
2222import qualified Control.Monad.Trans.Reader as R
2323import qualified Control.Monad.Trans.RWS.Lazy as RWS.Lazy
2424import qualified Control.Monad.Trans.RWS.Strict as RWS.Strict
25+import qualified Control.Monad.Trans.RWS.CPS as RWS.CPS
2526import qualified Control.Monad.Trans.State.Lazy as S.Lazy
2627import qualified Control.Monad.Trans.State.Strict as S.Strict
2728import qualified Control.Monad.Trans.Writer.Lazy as W.Lazy
2829import qualified Control.Monad.Trans.Writer.Strict as W.Strict
30+import qualified Control.Monad.Trans.Writer.CPS as W.CPS
31+
32+#if MIN_VERSION_transformers(0,5,3)
33+import qualified Control.Monad.Trans.Accum as Acc
34+#endif
2935
3036-- | Signature of the @local@ operation,
3137-- introduced in "Control.Monad.Trans.Reader".
@@ -51,36 +57,62 @@ defaultLiftLocal t unT a l f = t . liftLocal a l f . unT
5157
5258instance LiftLocal (C.ContT r) where
5359 liftLocal a l f = C.liftLocal a l f
60+ {-# INLINE liftLocal #-}
5461
5562instance LiftLocal (E.ExceptT e) where
5663 liftLocal _ l f = E.mapExceptT (l f)
64+ {-# INLINE liftLocal #-}
5765
5866instance LiftLocal I.IdentityT where
5967 liftLocal _ l f = I.mapIdentityT (l f)
68+ {-# INLINE liftLocal #-}
6069
6170instance LiftLocal L.ListT where
6271 liftLocal _ l f = L.mapListT (l f)
72+ {-# INLINE liftLocal #-}
6373
6474instance LiftLocal M.MaybeT where
6575 liftLocal _ l f = M.mapMaybeT (l f)
76+ {-# INLINE liftLocal #-}
6677
6778instance LiftLocal (R.ReaderT r) where
6879 liftLocal _ l f = R.mapReaderT (l f)
80+ {-# INLINE liftLocal #-}
6981
7082instance Monoid w => LiftLocal (RWS.Lazy.RWST r w s) where
7183 liftLocal _ l f = RWS.Lazy.mapRWST (l f)
84+ {-# INLINE liftLocal #-}
7285
7386instance Monoid w => LiftLocal (RWS.Strict.RWST r w s) where
7487 liftLocal _ l f = RWS.Strict.mapRWST (l f)
88+ {-# INLINE liftLocal #-}
89+
90+instance Monoid w => LiftLocal (RWS.CPS.RWST r w s) where
91+ liftLocal _ l f = RWS.CPS.mapRWST (l f)
92+ {-# INLINE liftLocal #-}
7593
7694instance LiftLocal (S.Lazy.StateT s) where
7795 liftLocal _ l f = S.Lazy.mapStateT (l f)
96+ {-# INLINE liftLocal #-}
7897
7998instance LiftLocal (S.Strict.StateT s) where
8099 liftLocal _ l f = S.Strict.mapStateT (l f)
100+ {-# INLINE liftLocal #-}
81101
82102instance Monoid w => LiftLocal (W.Lazy.WriterT w) where
83103 liftLocal _ l f = W.Lazy.mapWriterT (l f)
104+ {-# INLINE liftLocal #-}
84105
85106instance Monoid w => LiftLocal (W.Strict.WriterT w) where
86107 liftLocal _ l f = W.Strict.mapWriterT (l f)
108+ {-# INLINE liftLocal #-}
109+
110+instance Monoid w => LiftLocal (W.CPS.WriterT w) where
111+ liftLocal _ l f = W.CPS.mapWriterT (l f)
112+ {-# INLINE liftLocal #-}
113+
114+#if MIN_VERSION_transformers(0,5,3)
115+instance Monoid w => LiftLocal (Acc.AccumT w) where
116+ liftLocal _ l f = Acc.mapAccumT (l f)
117+ {-# INLINE liftLocal #-}
118+#endif
src/Control/Monad/Trans/Lift/Pass.hs+45−10
@@ -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
src/Control/Monad/Trans/Lift/StT.hs+15−1
@@ -1,5 +1,7 @@
1+{-# LANGUAGE CPP #-}
12{-# LANGUAGE TypeFamilies #-}
23{-# LANGUAGE KindSignatures #-}
4+
35-- | The 'StT' type family.
46module Control.Monad.Trans.Lift.StT (StT) where
57
@@ -10,10 +12,16 @@ import qualified Control.Monad.Trans.Maybe as M
1012import qualified Control.Monad.Trans.Reader as R
1113import qualified Control.Monad.Trans.RWS.Lazy as RWS.Lazy
1214import qualified Control.Monad.Trans.RWS.Strict as RWS.Strict
15+import qualified Control.Monad.Trans.RWS.CPS as RWS.CPS
1316import qualified Control.Monad.Trans.State.Lazy as S.Lazy
1417import qualified Control.Monad.Trans.State.Strict as S.Strict
1518import qualified Control.Monad.Trans.Writer.Lazy as W.Lazy
1619import qualified Control.Monad.Trans.Writer.Strict as W.Strict
20+import qualified Control.Monad.Trans.Writer.CPS as W.CPS
21+
22+#if MIN_VERSION_transformers(0,5,3)
23+import qualified Control.Monad.Trans.Accum as Acc
24+#endif
1725
1826-- | Internal state of a monad transformer.
1927-- Same as @StT@ from the @monad-control@ package.
@@ -26,7 +34,13 @@ type instance StT M.MaybeT a = Maybe a
2634type instance StT (R.ReaderT r) a = a
2735type instance StT (RWS.Lazy.RWST r w s) a = (a, s, w)
2836type instance StT (RWS.Strict.RWST r w s) a = (a, s, w)
37+type instance StT (RWS.CPS.RWST r w s) a = (a, s, w)
2938type instance StT (S.Lazy.StateT s) a = (a, s)
3039type instance StT (S.Strict.StateT s) a = (a, s)
31−type instance StT (W.Strict.WriterT w) a = (a, w)
3240type instance StT (W.Lazy.WriterT w) a = (a, w)
41+type instance StT (W.Strict.WriterT w) a = (a, w)
42+type instance StT (W.CPS.WriterT w) a = (a, w)
43+
44+#if MIN_VERSION_transformers(0,5,3)
45+type instance StT (Acc.AccumT w) a = (a, w)
46+#endif
stack-7.8.3.yamlnew file+7
@@ -0,0 +1,7 @@
1+flags: {}
2+packages:
3+- '.'
4+resolver: lts-2.22
5+extra-deps:
6+- transformers-0.4.2.0
7+- writer-cps-transformers-0.1.1.3
stack.yamlnew file+4
@@ -0,0 +1,4 @@
1+flags: {}
2+packages:
3+- '.'
4+resolver: nightly-2018-03-17
transformers-lift.cabal+13−8
@@ -1,18 +1,19 @@
1+cabal-version: 2.2
12name: transformers-lift
2−version: 0.1.0.0
3+version: 0.2.0.2
34synopsis: Ad-hoc type classes for lifting
45description:
56 This simple and lightweight library provides type classes
67 for lifting monad transformer operations.
78
8−license: BSD3
9+-- license: BSD3
10+-- ^ unfortunately have to comment this line because of cabal2nix
911license-file: LICENSE
10−author: Index Int
11−maintainer: Index Int <vlad.z.4096@gmail.com>
12+author: Vladislav Zavialov
13+maintainer: Vladislav Zavialov <vlad.z.4096@gmail.com>
1214category: Control
1315bug-reports: https://github.com/int-index/transformers-lift/issues
1416build-type: Simple
15−cabal-version: >=1.10
1617
1718library
1819 exposed-modules: Control.Monad.Trans.Lift.Local
@@ -22,8 +23,12 @@ library
2223 Control.Monad.Trans.Lift.Pass
2324 Control.Monad.Trans.Lift.StT
2425
25− build-depends: base >=4.6 && <4.9
26− , transformers >= 0.4.2
26+ build-depends: base >=4.8 && <4.13
27+ , transformers >= 0.4.2.0 && <0.6
28+ , writer-cps-transformers == 0.1.1.4
29+
30+ mixins: transformers hiding
31+ (Control.Monad.Trans.RWS.CPS, Control.Monad.Trans.Writer.CPS)
2732
2833 default-language: Haskell2010
2934 other-extensions: CPP
@@ -32,4 +37,4 @@ library
3237 KindSignatures
3338
3439 hs-source-dirs: src
35− ghc-options: -Wall
40+ ghc-options: -Wall -fno-warn-deprecations