git.iko.soy/typeable/transformers-lift
on master help sign in
LiftCallCC
commit17effc5a4f6bdab7b540e7c9d9eafd54e9c02a2b authorIndex Int <vlad.z.4096@gmail.com> dateFri 19 Jun 2015, 14:55 (11 years ago) parente644ec5
1 file changed+70−1
src/Control/Monad/Trans/Lift/CallCC.hs+70−1
src/Control/Monad/Trans/Lift/CallCC.hs+70−1
@@ -1 +1,70 @@
1−module Control.Monad.Trans.Lift.CallCC where
1+{-# LANGUAGE TypeFamilies #-}
2+{-# LANGUAGE UndecidableInstances #-}
3+module Control.Monad.Trans.Lift.CallCC
4+ ( LiftCallCC(..)
5+ , CallCC
6+ , module Control.Monad.Trans.Class
7+ ) where
8+
9+import Data.Monoid
10+
11+import Control.Monad.Signatures
12+import Control.Monad.Trans.Class
13+import Control.Monad.Trans.Control
14+
15+import qualified Control.Monad.Trans.Except as E
16+import qualified Control.Monad.Trans.Identity as I
17+import qualified Control.Monad.Trans.List as L
18+import qualified Control.Monad.Trans.Maybe as M
19+import qualified Control.Monad.Trans.Reader as R
20+import qualified Control.Monad.Trans.Cont as C
21+import qualified Control.Monad.Trans.RWS.Lazy as RWS.Lazy
22+import qualified Control.Monad.Trans.RWS.Strict as RWS.Strict
23+import qualified Control.Monad.Trans.State.Lazy as S.Lazy
24+import qualified Control.Monad.Trans.State.Strict as S.Strict
25+import qualified Control.Monad.Trans.Writer.Lazy as W.Lazy
26+import qualified Control.Monad.Trans.Writer.Strict as W.Strict
27+
28+class MonadTrans t => LiftCallCC t where
29+ type CallCCStT t a
30+ type CallCCStT t a = StT t a
31+ liftCallCC :: Monad m => CallCC m (CallCCStT t a) (CallCCStT t b) -> CallCC (t m) a b
32+ liftCallCC' :: Monad m => CallCC m (CallCCStT t a) (CallCCStT t b) -> CallCC (t m) a b
33+ liftCallCC' = liftCallCC
34+
35+instance LiftCallCC (E.ExceptT e) where
36+ liftCallCC = E.liftCallCC
37+
38+instance LiftCallCC I.IdentityT where
39+ liftCallCC = I.liftCallCC
40+
41+instance LiftCallCC L.ListT where
42+ liftCallCC = L.liftCallCC
43+
44+instance LiftCallCC M.MaybeT where
45+ liftCallCC = M.liftCallCC
46+
47+instance LiftCallCC (R.ReaderT r) where
48+ liftCallCC = R.liftCallCC
49+
50+instance Monoid w => LiftCallCC (RWS.Lazy.RWST r w s) where
51+ liftCallCC = RWS.Lazy.liftCallCC
52+ liftCallCC' = RWS.Lazy.liftCallCC'
53+
54+instance Monoid w => LiftCallCC (RWS.Strict.RWST r w s) where
55+ liftCallCC = RWS.Strict.liftCallCC
56+ liftCallCC' = RWS.Strict.liftCallCC'
57+
58+instance LiftCallCC (S.Lazy.StateT s) where
59+ liftCallCC = S.Lazy.liftCallCC
60+ liftCallCC' = S.Lazy.liftCallCC'
61+
62+instance LiftCallCC (S.Strict.StateT s) where
63+ liftCallCC = S.Strict.liftCallCC
64+ liftCallCC' = S.Strict.liftCallCC'
65+
66+instance Monoid w => LiftCallCC (W.Lazy.WriterT w) where
67+ liftCallCC = W.Lazy.liftCallCC
68+
69+instance Monoid w => LiftCallCC (W.Strict.WriterT w) where
70+ liftCallCC = W.Strict.liftCallCC