diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+4.3.3
+    * Make `X` a synonym for `Data.Void.Void`
+
 4.3.2
 
 * BUG FIX: Fix `MMonad` instance for `ListT`
diff --git a/pipes.cabal b/pipes.cabal
--- a/pipes.cabal
+++ b/pipes.cabal
@@ -1,5 +1,5 @@
 Name: pipes
-Version: 4.3.2
+Version: 4.3.3
 Cabal-Version: >= 1.10
 Build-Type: Simple
 Tested-With: GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.2, GHC == 8.0.1
@@ -50,7 +50,8 @@
         transformers >= 0.2.0.0 && < 0.6,
         exceptions   >= 0.4     && < 0.9,
         mmorph       >= 1.0.0   && < 1.1,
-        mtl          >= 2.2.1   && < 2.3
+        mtl          >= 2.2.1   && < 2.3,
+        void         >= 0.4     && < 0.8
 
     Exposed-Modules:
         Pipes,
diff --git a/src/Pipes/Internal.hs b/src/Pipes/Internal.hs
--- a/src/Pipes/Internal.hs
+++ b/src/Pipes/Internal.hs
@@ -42,6 +42,7 @@
 import Control.Monad.Reader (MonadReader(..))
 import Control.Monad.State (MonadState(..))
 import Control.Monad.Writer (MonadWriter(..))
+import Data.Void (Void)
 
 #if MIN_VERSION_base(4,8,0)
 import Control.Applicative (Alternative(..))
@@ -51,6 +52,7 @@
 #endif
 
 import qualified Control.Monad.Catch
+import qualified Data.Void
 
 {-| A 'Proxy' is a monad transformer that receives and sends information on both
     an upstream and downstream interface.
@@ -260,15 +262,10 @@
         Pure    r      -> return (Pure r)
 {-# INLINABLE observe #-}
 
-{-| The empty type, used to close output ends
-
-    When @Data.Void@ is merged into @base@, this will change to:
-
-> type X = Void
--}
-newtype X = X X
+-- | The empty type, used to close output ends
+type X = Void
 
 -- | Use 'closed' to \"handle\" impossible outputs
 closed :: X -> a
-closed (X x) = closed x
+closed = Data.Void.absurd
 {-# INLINABLE closed #-}
