diff --git a/ChannelT.cabal b/ChannelT.cabal
--- a/ChannelT.cabal
+++ b/ChannelT.cabal
@@ -1,5 +1,5 @@
 name:                ChannelT
-version:             0.0.0.3
+version:             0.0.0.4
 synopsis:            Generalized stream processors
 description:         A mutual generalization of <https://hackage.haskell.org/package/pipes pipes> and <https://hackage.haskell.org/package/machines machines>; a library for exploring a particular corner of the design space of streaming IO (and other related tasks) in Haskell.
 license:             BSD3
@@ -21,7 +21,7 @@
   hs-source-dirs:      src
   exposed-modules:     Control.Monad.Channel.Internal
                      , Control.Monad.Channel
-  -- other-modules:       
+  -- other-modules:
   build-depends:       base >= 4.8.2.0 && < 5
                      , mtl >= 2.2.1 && < 2.3
                      , free >= 4.12.4 && < 4.13
diff --git a/src/Control/Monad/Channel/Internal.hs b/src/Control/Monad/Channel/Internal.hs
--- a/src/Control/Monad/Channel/Internal.hs
+++ b/src/Control/Monad/Channel/Internal.hs
@@ -17,7 +17,7 @@
 deriving instance Generic (FreeT f m a)
 
 newtype ChannelT sel m a = ChannelT { unChannelT :: FreeT (ChannelF sel) m a }
-  deriving (Functor, Applicative, Monad, MFunctor, MonadTrans, MonadFree (ChannelF sel), Generic1, Generic)
+  deriving (Functor, Applicative, Monad, MonadTrans, MonadFree (ChannelF sel), Generic1, Generic)
 deriving instance MonadBase b m => MonadBase b (ChannelT sel m)
 
 data ChannelF (sel :: * -> * -> *) (x :: *) =
@@ -33,5 +33,10 @@
 
 instance Monad m => MonadChannel sel (ChannelT sel m) where
   syncOn s o = ChannelT . FreeT . return . Free . SyncChannel s o $ FreeT . return . Pure
+
+-- NB: Don't use GeneralizedNewtypeDeriving to create this instance, as it will
+-- trigger GHC Trac #11837 on GHC 8.0.1 and older.
+instance MFunctor (ChannelT sel) where
+  hoist f = ChannelT . hoist f . unChannelT
 
 type Channel sel = ChannelT sel Identity
