@@ -1,5 +1,5 @@
1−module Ether.Handler
2− ( Handler(..)
1+module Ether.TaggedTrans
2+ ( TaggedTrans(..)
33 ) where
44
55import Control.Applicative
@@ -29,109 +29,114 @@ import qualified Control.Monad.Error.Class as Mtl
2929import GHC.Generics (Generic)
3030import Data.Coerce (coerce)
3131
32−newtype Handler eff trans m a = Handler (trans m a)
32+newtype TaggedTrans tag trans m a = TaggedTrans (trans m a)
3333 deriving
3434 ( Generic
3535 , Functor, Applicative, Alternative, Monad, MonadPlus
3636 , MonadFix, MonadTrans, MonadIO, MFunctor, MMonad
3737 , MonadThrow, MonadCatch, MonadMask )
3838
39−type Pack eff trans m a = trans m a -> Handler eff trans m a
39+type Pack tag trans m a = trans m a -> TaggedTrans tag trans m a
4040
41−type Unpack eff trans m a = Handler eff trans m a -> trans m a
41+type Unpack tag trans m a = TaggedTrans tag trans m a -> trans m a
4242
4343instance
4444 ( MB.MonadBase b (trans m)
45− ) => MB.MonadBase b (Handler eff trans m)
45+ ) => MB.MonadBase b (TaggedTrans tag trans m)
4646 where
4747 liftBase =
4848 (coerce :: forall a .
4949 (b a -> trans m a) ->
50− (b a -> Handler eff trans m a))
50+ (b a -> TaggedTrans tag trans m a))
5151 MB.liftBase
52+ {-# INLINE liftBase #-}
5253
5354instance
5455 ( MC.MonadTransControl trans
55− ) => MC.MonadTransControl (Handler eff trans)
56+ ) => MC.MonadTransControl (TaggedTrans tag trans)
5657 where
57− type StT (Handler eff trans) a = MC.StT trans a
58+ type StT (TaggedTrans tag trans) a = MC.StT trans a
59+
5860 liftWith = MC.defaultLiftWith
59− (coerce :: Pack eff trans m a)
60− (coerce :: Unpack eff trans m a)
61+ (coerce :: Pack tag trans m a)
62+ (coerce :: Unpack tag trans m a)
63+ {-# INLINE liftWith #-}
64+
6165 restoreT = MC.defaultRestoreT
62− (coerce :: Pack eff trans m a)
66+ (coerce :: Pack tag trans m a)
67+ {-# INLINE restoreT #-}
6368
6469type LiftBaseWith b m a = (MC.RunInBase m b -> b a) -> m a
6570
6671newtype LiftBaseWith' b m a = LBW { unLBW :: LiftBaseWith b m a }
6772
6873coerceLiftBaseWith ::
69− LiftBaseWith b (trans m) a ->
70− LiftBaseWith b (Handler eff trans m) a
74+ LiftBaseWith b (trans m) a ->
75+ LiftBaseWith b (TaggedTrans tag trans m) a
7176coerceLiftBaseWith lbw =
7277 unLBW (coerce (LBW lbw))
7378{-# INLINE coerceLiftBaseWith #-}
7479
7580instance
7681 ( MC.MonadBaseControl b (trans m)
77− ) => MC.MonadBaseControl b (Handler eff trans m)
82+ ) => MC.MonadBaseControl b (TaggedTrans tag trans m)
7883 where
79− type StM (Handler eff trans m) a = MC.StM (trans m) a
84+ type StM (TaggedTrans tag trans m) a = MC.StM (trans m) a
8085
8186 liftBaseWith = coerceLiftBaseWith MC.liftBaseWith
8287 {-# INLINE liftBaseWith #-}
8388
8489 restoreM =
8590 (coerce :: forall a .
86− (MC.StM (trans m) a -> trans m a) ->
87− (MC.StM (trans m) a -> Handler eff trans m a))
91+ (MC.StM (trans m) a -> trans m a) ->
92+ (MC.StM (trans m) a -> TaggedTrans tag trans m a))
8893 MC.restoreM
8994 {-# INLINE restoreM #-}
9095
91−type instance Lift.StT (Handler eff trans) a = Lift.StT trans a
96+type instance Lift.StT (TaggedTrans tag trans) a = Lift.StT trans a
9297
93−instance Lift.LiftLocal trans => Lift.LiftLocal (Handler eff trans) where
98+instance Lift.LiftLocal trans => Lift.LiftLocal (TaggedTrans tag trans) where
9499 liftLocal =
95100 Lift.defaultLiftLocal
96− (coerce :: Pack eff trans m a)
97− (coerce :: Unpack eff trans m a)
101+ (coerce :: Pack tag trans m a)
102+ (coerce :: Unpack tag trans m a)
98103
99−instance Lift.LiftCatch trans => Lift.LiftCatch (Handler eff trans) where
104+instance Lift.LiftCatch trans => Lift.LiftCatch (TaggedTrans tag trans) where
100105 liftCatch =
101106 Lift.defaultLiftCatch
102− (coerce :: Pack eff trans m a)
103− (coerce :: Unpack eff trans m a)
107+ (coerce :: Pack tag trans m a)
108+ (coerce :: Unpack tag trans m a)
104109
105−instance Lift.LiftListen trans => Lift.LiftListen (Handler eff trans) where
110+instance Lift.LiftListen trans => Lift.LiftListen (TaggedTrans tag trans) where
106111 liftListen =
107112 Lift.defaultLiftListen
108− (coerce :: Pack eff trans m a)
109− (coerce :: Unpack eff trans m a)
113+ (coerce :: Pack tag trans m a)
114+ (coerce :: Unpack tag trans m a)
110115
111−instance Lift.LiftPass trans => Lift.LiftPass (Handler eff trans) where
116+instance Lift.LiftPass trans => Lift.LiftPass (TaggedTrans tag trans) where
112117 liftPass =
113118 Lift.defaultLiftPass
114− (coerce :: Pack eff trans m a)
115− (coerce :: Unpack eff trans m a)
119+ (coerce :: Pack tag trans m a)
120+ (coerce :: Unpack tag trans m a)
116121
117−instance Lift.LiftCallCC trans => Lift.LiftCallCC (Handler eff trans) where
122+instance Lift.LiftCallCC trans => Lift.LiftCallCC (TaggedTrans tag trans) where
118123 liftCallCC =
119124 Lift.defaultLiftCallCC
120− (coerce :: Pack eff trans m a)
121− (coerce :: Unpack eff trans m a)
125+ (coerce :: Pack tag trans m a)
126+ (coerce :: Unpack tag trans m a)
122127 liftCallCC' =
123128 Lift.defaultLiftCallCC'
124− (coerce :: Pack eff trans m a)
125− (coerce :: Unpack eff trans m a)
129+ (coerce :: Pack tag trans m a)
130+ (coerce :: Unpack tag trans m a)
126131
127132
128−-- Instances for mtl Mtles
133+-- Instances for mtl classes
129134
130135instance {-# OVERLAPPABLE #-}
131136 ( Mtl.MonadCont m
132137 , Lift.LiftCallCC trans
133138 , Monad (trans m)
134− ) => Mtl.MonadCont (Handler eff trans m)
139+ ) => Mtl.MonadCont (TaggedTrans tag trans m)
135140 where
136141 callCC = Lift.liftCallCC' Mtl.callCC
137142
@@ -139,7 +144,7 @@ instance {-# OVERLAPPABLE #-}
139144 ( Mtl.MonadReader r m
140145 , Lift.LiftLocal trans
141146 , Monad (trans m)
142− ) => Mtl.MonadReader r (Handler eff trans m)
147+ ) => Mtl.MonadReader r (TaggedTrans tag trans m)
143148 where
144149 ask = lift Mtl.ask
145150 local = Lift.liftLocal Mtl.ask Mtl.local
@@ -149,7 +154,7 @@ instance {-# OVERLAPPABLE #-}
149154 ( Mtl.MonadState s m
150155 , MonadTrans trans
151156 , Monad (trans m)
152− ) => Mtl.MonadState s (Handler eff trans m)
157+ ) => Mtl.MonadState s (TaggedTrans tag trans m)
153158 where
154159 get = lift Mtl.get
155160 put = lift . Mtl.put
@@ -160,7 +165,7 @@ instance {-# OVERLAPPABLE #-}
160165 , Lift.LiftListen trans
161166 , Lift.LiftPass trans
162167 , Monad (trans m)
163− ) => Mtl.MonadWriter w (Handler eff trans m)
168+ ) => Mtl.MonadWriter w (TaggedTrans tag trans m)
164169 where
165170 writer = lift . Mtl.writer
166171 tell = lift . Mtl.tell
@@ -171,7 +176,7 @@ instance {-# OVERLAPPABLE #-}
171176 ( Mtl.MonadError e m
172177 , Lift.LiftCatch trans
173178 , Monad (trans m)
174− ) => Mtl.MonadError e (Handler eff trans m)
179+ ) => Mtl.MonadError e (TaggedTrans tag trans m)
175180 where
176181 throwError = lift . Mtl.throwError
177182 catchError = Lift.liftCatch Mtl.catchError