on master help sign in
Also hand-write the MMonad instance
5151fe0Ryan Scott
src/Ether/TaggedTrans.hs+9−2
@@ -7,7 +7,7 @@ import Control.Monad (MonadPlus)
7import Control.Monad.Fix (MonadFix)
7import Control.Monad.Fix (MonadFix)
8import Control.Monad.Trans.Class (MonadTrans, lift)
8import Control.Monad.Trans.Class (MonadTrans, lift)
9import Control.Monad.IO.Class (MonadIO)
9import Control.Monad.IO.Class (MonadIO)
10−import Control.Monad.Morph (MFunctor(..), MMonad)
10+import Control.Monad.Morph (MFunctor(..), MMonad(..))
11import Control.Monad.Catch (MonadThrow, MonadCatch, MonadMask)
11import Control.Monad.Catch (MonadThrow, MonadCatch, MonadMask)
12
12
13import qualified Control.Monad.Base as MB
13import qualified Control.Monad.Base as MB
@@ -33,7 +33,7 @@ newtype TaggedTrans tag trans m a = TaggedTrans (trans m a)
33 deriving
33 deriving
34 ( Generic
34 ( Generic
35 , Functor, Applicative, Alternative, Monad, MonadPlus
35 , Functor, Applicative, Alternative, Monad, MonadPlus
36− , MonadFix, MonadTrans, MonadIO, MMonad
36+ , MonadFix, MonadTrans, MonadIO
37 , MonadThrow, MonadCatch, MonadMask )
37 , MonadThrow, MonadCatch, MonadMask )
38
38
39type Pack tag trans m a = trans m a -> TaggedTrans tag trans m a
39type Pack tag trans m a = trans m a -> TaggedTrans tag trans m a
@@ -179,3 +179,10 @@ instance
179-- trigger GHC Trac #11837 on GHC 8.0.1 and older.
179-- trigger GHC Trac #11837 on GHC 8.0.1 and older.
180instance MFunctor trans => MFunctor (TaggedTrans tag trans) where
180instance MFunctor trans => MFunctor (TaggedTrans tag trans) where
181 hoist f (TaggedTrans t) = TaggedTrans (hoist f t)
181 hoist f (TaggedTrans t) = TaggedTrans (hoist f t)
182+
183+-- NB: Don't use GeneralizedNewtypeDeriving to create this instance, as it will
184+-- trigger GHC Trac #11837 on GHC 8.0.1 and older.
185+instance MMonad trans => MMonad (TaggedTrans tag trans) where
186+ embed f (TaggedTrans t) = TaggedTrans (embed (runTaggedTrans . f) t)
187+ where
188+ runTaggedTrans (TaggedTrans x) = x