diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+1.1.3
+
+* Add an `MFunctor` instance for `ComposeT` for GHC >= 8.6
+* Add GHC 8.8 support
+
 1.1.2
 
 * Conditionally disable `Polykinds` to support older versions of GHC
diff --git a/mmorph.cabal b/mmorph.cabal
--- a/mmorph.cabal
+++ b/mmorph.cabal
@@ -1,5 +1,5 @@
 Name: mmorph
-Version: 1.1.2
+Version: 1.1.3
 Cabal-Version: >= 1.8.0.2
 Build-Type: Simple
 License: BSD3
diff --git a/src/Control/Monad/Trans/Compose.hs b/src/Control/Monad/Trans/Compose.hs
--- a/src/Control/Monad/Trans/Compose.hs
+++ b/src/Control/Monad/Trans/Compose.hs
@@ -3,7 +3,12 @@
 {-# LANGUAGE KindSignatures #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE UndecidableInstances #-}
+{-# LANGUAGE CPP #-}
 
+#if __GLASGOW_HASKELL__ >= 806
+{-# LANGUAGE QuantifiedConstraints #-}
+#endif
+
 {-| Composition of monad transformers. A higher-order version of
     "Data.Functor.Compose".
 -}
@@ -30,6 +35,11 @@
 import Data.Traversable (Traversable(traverse, sequenceA, mapM, sequence))
 import Prelude hiding (foldr, foldl, foldr1, foldl1, mapM, sequence)
 
+#if __GLASGOW_HASKELL__ >= 800
+import Control.Monad.Fail (MonadFail(..))
+import qualified Control.Monad.Fail
+#endif
+
 infixr 9 `ComposeT`
 
 -- | Composition of monad transformers.
@@ -41,6 +51,12 @@
   where
     lift = ComposeT . hoist lift . lift
 
+#if __GLASGOW_HASKELL__ >= 806
+instance (MFunctor f, MFunctor g, forall m. Monad m => Monad (g m))
+    => MFunctor (ComposeT f g) where
+    hoist f (ComposeT m) = ComposeT (hoist (hoist f) m)
+#endif
+
 instance Functor (f (g m)) => Functor (ComposeT f g m) where
     fmap f (ComposeT m) = ComposeT (fmap f m)
 
@@ -57,7 +73,14 @@
 instance Monad (f (g m)) => Monad (ComposeT f g m) where
     return a = ComposeT (return a)
     m >>= f  = ComposeT (getComposeT m >>= \x -> getComposeT (f x))
-    fail e   = ComposeT (fail e)
+#if __GLASGOW_HASKELL__ < 808
+    fail e   = ComposeT (Prelude.fail e)
+#endif
+
+#if __GLASGOW_HASKELL__ >= 800
+instance MonadFail (f (g m)) => MonadFail (ComposeT f g m) where
+    fail e = ComposeT (Control.Monad.Fail.fail e)
+#endif
 
 instance MonadPlus (f (g m)) => MonadPlus (ComposeT f g m) where
     mzero = ComposeT mzero
