diff --git a/Data/Conduit.hs b/Data/Conduit.hs
--- a/Data/Conduit.hs
+++ b/Data/Conduit.hs
@@ -64,6 +64,7 @@
 import Control.Monad.Trans.Resource
 import Data.Conduit.Internal hiding (await, awaitForever, yield, yieldOr, leftover, bracketP, addCleanup, transPipe, mapOutput, mapOutputMaybe, mapInput)
 import qualified Data.Conduit.Internal as CI
+import Control.Monad.Morph (hoist)
 
 -- Define fixity of all our operators
 infixr 0 $$
@@ -208,9 +209,11 @@
 --
 -- <https://github.com/snoyberg/conduit/wiki/Dealing-with-monad-transformers>
 --
+-- This function is just a synonym for 'hoist'.
+--
 -- Since 0.4.0
 transPipe :: Monad m => (forall a. m a -> n a) -> ConduitM i o m r -> ConduitM i o n r
-transPipe f = ConduitM . CI.transPipe f . unConduitM
+transPipe = hoist
 
 -- | Apply a function to all the output values of a @ConduitM@.
 --
diff --git a/Data/Conduit/Internal.hs b/Data/Conduit/Internal.hs
--- a/Data/Conduit/Internal.hs
+++ b/Data/Conduit/Internal.hs
@@ -60,6 +60,7 @@
 import Control.Monad.Trans.Resource
 import qualified GHC.Exts
 import qualified Data.IORef as I
+import Control.Monad.Morph
 
 -- | The underlying datatype for all the types in this package.  In has six
 -- type parameters:
@@ -147,7 +148,7 @@
 --
 -- Since 1.0.0
 newtype ConduitM i o m r = ConduitM { unConduitM :: Pipe i i o () m r }
-    deriving (Functor, Applicative, Monad, MonadIO, MonadTrans, MonadThrow, MonadActive, MonadResource)
+    deriving (Functor, Applicative, Monad, MonadIO, MonadTrans, MonadThrow, MonadActive, MonadResource, MFunctor)
 instance MonadBase base m => MonadBase base (ConduitM i o m) where
     liftBase = lift . liftBase
 instance Monad m => Monoid (ConduitM i o m ()) where
@@ -435,6 +436,8 @@
 --
 -- <https://github.com/snoyberg/conduit/wiki/Dealing-with-monad-transformers>
 --
+-- This function is just a synonym for 'hoist'.
+--
 -- Since 0.4.0
 transPipe :: Monad m => (forall a. m a -> n a) -> Pipe l i o u m r -> Pipe l i o u n r
 transPipe f (HaveOutput p c o) = HaveOutput (transPipe f p) (f c) o
@@ -629,3 +632,7 @@
     go (Done r) = Done r
     go (PipeM mp) = PipeM (liftM go mp)
     go (Leftover p l) = Leftover (go p) l
+
+-- | Since 1.0.4
+instance MFunctor (Pipe l i o u) where
+    hoist = transPipe
diff --git a/conduit.cabal b/conduit.cabal
--- a/conduit.cabal
+++ b/conduit.cabal
@@ -1,5 +1,5 @@
 Name:                conduit
-Version:             1.0.3
+Version:             1.0.4
 Synopsis:            Streaming data processing library.
 Description:
     @conduit@ is a solution to the streaming data problem, allowing for production, transformation, and consumption of streams of data in constant memory. It is an alternative to lazy I\/O which guarantees deterministic resource handling, and fits in the same general solution space as @enumerator@\/@iteratee@ and @pipes@. For a tutorial, please visit <https://haskell.fpcomplete.com/user/snoyberg/library-documentation/conduit-overview>.
@@ -57,6 +57,7 @@
                      , bytestring               >= 0.9
                      , text                     >= 0.11
                      , void                     >= 0.5.5        && < 0.6
+                     , mmorph
   ghc-options:     -Wall
 
 test-suite test
