@@ -6,7 +6,12 @@
6{-# LANGUAGE UndecidableInstances #-}
6{-# LANGUAGE UndecidableInstances #-}
7{-# LANGUAGE ConstraintKinds #-}
7{-# LANGUAGE ConstraintKinds #-}
8{-# LANGUAGE TypeFamilies #-}
8{-# LANGUAGE TypeFamilies #-}
9−module Control.Ether.TT where
14+module Control.Monad.Trans.Ether.Tagged where
11import Control.Applicative
16import Control.Applicative
12import Control.Monad (MonadPlus)
17import Control.Monad (MonadPlus)
@@ -38,44 +43,34 @@ import Data.Coerce (coerce)
38import Control.Ether.Util (MonadApplicative)
43import Control.Ether.Util (MonadApplicative)
40-- | Tagged monad transformer.
45-- | Tagged monad transformer.
41−newtype TT tag trans (m :: * -> *) a = TT (trans m a)
46+newtype TaggedTrans tag trans (m :: * -> *) a = TaggedTrans (trans m a)
45− , Applicative
49+ , Functor, Applicative, Alternative, Monad, MonadPlus
50− , MonadTrans
50+ , MonadFix, MonadTrans, MonadIO, MFunctor, MMonad
54− , MonadThrow
51+ , MonadThrow, MonadCatch, MonadMask )
58-- | Type-restricted 'coerce'.
53-- | Type-restricted 'coerce'.
59−pack :: trans m a -> TT tag trans m a
54+pack :: trans m a -> TaggedTrans tag trans m a
60pack = coerce
55pack = coerce
62-- | Type-restricted 'coerce'.
57-- | Type-restricted 'coerce'.
63−unpack :: TT tag trans m a -> trans m a
58+unpack :: TaggedTrans tag trans m a -> trans m a
64unpack = coerce
59unpack = coerce
67 ( MB.MonadBase b m
62 ( MB.MonadBase b m
68 , MonadTrans trans
63 , MonadTrans trans
69 , MonadApplicative (trans m)
64 , MonadApplicative (trans m)
70− ) => MB.MonadBase b (TT tag trans m)
65+ ) => MB.MonadBase b (TaggedTrans tag trans m)
72 liftBase = MB.liftBaseDefault
67 liftBase = MB.liftBaseDefault
75 ( MC.MonadTransControl trans
70 ( MC.MonadTransControl trans
76− ) => MC.MonadTransControl (TT tag trans)
71+ ) => MC.MonadTransControl (TaggedTrans tag trans)
78− type StT (TT tag trans) a = MC.StT trans a
73+ type StT (TaggedTrans tag trans) a = MC.StT trans a
79 liftWith = MC.defaultLiftWith pack unpack
74 liftWith = MC.defaultLiftWith pack unpack
80 restoreT = MC.defaultRestoreT pack
75 restoreT = MC.defaultRestoreT pack
@@ -83,27 +78,27 @@ instance
83 ( MC.MonadBaseControl b m
78 ( MC.MonadBaseControl b m
84 , MC.MonadTransControl trans
79 , MC.MonadTransControl trans
85 , MonadApplicative (trans m)
80 , MonadApplicative (trans m)
86− ) => MC.MonadBaseControl b (TT tag trans m)
81+ ) => MC.MonadBaseControl b (TaggedTrans tag trans m)
88− type StM (TT tag trans m) a = MC.ComposeSt trans m a
83+ type StM (TaggedTrans tag trans m) a = MC.ComposeSt trans m a
89 liftBaseWith = MC.defaultLiftBaseWith
84 liftBaseWith = MC.defaultLiftBaseWith
90 restoreM = MC.defaultRestoreM
85 restoreM = MC.defaultRestoreM
92−type instance Lift.StT (TT tag trans) a = Lift.StT trans a
87+type instance Lift.StT (TaggedTrans tag trans) a = Lift.StT trans a
94−instance Lift.LiftLocal trans => Lift.LiftLocal (TT tag trans) where
89+instance Lift.LiftLocal trans => Lift.LiftLocal (TaggedTrans tag trans) where
95 liftLocal = Lift.defaultLiftLocal pack unpack
90 liftLocal = Lift.defaultLiftLocal pack unpack
97−instance Lift.LiftCatch trans => Lift.LiftCatch (TT tag trans) where
92+instance Lift.LiftCatch trans => Lift.LiftCatch (TaggedTrans tag trans) where
98 liftCatch = Lift.defaultLiftCatch pack unpack
93 liftCatch = Lift.defaultLiftCatch pack unpack
100−instance Lift.LiftListen trans => Lift.LiftListen (TT tag trans) where
95+instance Lift.LiftListen trans => Lift.LiftListen (TaggedTrans tag trans) where
101 liftListen = Lift.defaultLiftListen pack unpack
96 liftListen = Lift.defaultLiftListen pack unpack
103−instance Lift.LiftPass trans => Lift.LiftPass (TT tag trans) where
98+instance Lift.LiftPass trans => Lift.LiftPass (TaggedTrans tag trans) where
104 liftPass = Lift.defaultLiftPass pack unpack
99 liftPass = Lift.defaultLiftPass pack unpack
106−instance Lift.LiftCallCC trans => Lift.LiftCallCC (TT tag trans) where
101+instance Lift.LiftCallCC trans => Lift.LiftCallCC (TaggedTrans tag trans) where
107 liftCallCC = Lift.defaultLiftCallCC pack unpack
102 liftCallCC = Lift.defaultLiftCallCC pack unpack
108 liftCallCC' = Lift.defaultLiftCallCC' pack unpack
103 liftCallCC' = Lift.defaultLiftCallCC' pack unpack
@@ -113,7 +108,7 @@ instance
113 ( Class.MonadCont m
108 ( Class.MonadCont m
114 , Lift.LiftCallCC trans
109 , Lift.LiftCallCC trans
115 , Monad (trans m)
110 , Monad (trans m)
116− ) => Class.MonadCont (TT tag trans m)
111+ ) => Class.MonadCont (TaggedTrans tag trans m)
118 callCC = Lift.liftCallCC' Class.callCC
113 callCC = Lift.liftCallCC' Class.callCC
@@ -121,7 +116,7 @@ instance
121 ( Class.MonadReader r m
116 ( Class.MonadReader r m
122 , Lift.LiftLocal trans
117 , Lift.LiftLocal trans
123 , Monad (trans m)
118 , Monad (trans m)
124− ) => Class.MonadReader r (TT tag trans m)
119+ ) => Class.MonadReader r (TaggedTrans tag trans m)
126 ask = lift Class.ask
121 ask = lift Class.ask
127 local = Lift.liftLocal Class.ask Class.local
122 local = Lift.liftLocal Class.ask Class.local
@@ -131,7 +126,7 @@ instance
131 ( Class.MonadState s m
126 ( Class.MonadState s m
132 , MonadTrans trans
127 , MonadTrans trans
133 , Monad (trans m)
128 , Monad (trans m)
134− ) => Class.MonadState s (TT tag trans m)
129+ ) => Class.MonadState s (TaggedTrans tag trans m)
136 get = lift Class.get
131 get = lift Class.get
137 put = lift . Class.put
132 put = lift . Class.put
@@ -142,7 +137,7 @@ instance
142 , Lift.LiftListen trans
137 , Lift.LiftListen trans
143 , Lift.LiftPass trans
138 , Lift.LiftPass trans
144 , Monad (trans m)
139 , Monad (trans m)
145− ) => Class.MonadWriter w (TT tag trans m)
140+ ) => Class.MonadWriter w (TaggedTrans tag trans m)
147 writer = lift . Class.writer
142 writer = lift . Class.writer
148 tell = lift . Class.tell
143 tell = lift . Class.tell
@@ -153,7 +148,7 @@ instance
153 ( Class.MonadError e m
148 ( Class.MonadError e m
154 , Lift.LiftCatch trans
149 , Lift.LiftCatch trans
155 , Monad (trans m)
150 , Monad (trans m)
156− ) => Class.MonadError e (TT tag trans m)
151+ ) => Class.MonadError e (TaggedTrans tag trans m)
158 throwError = lift . Class.throwError
153 throwError = lift . Class.throwError
159 catchError = Lift.liftCatch Class.catchError
154 catchError = Lift.liftCatch Class.catchError