diff --git a/CHANGES.markdown b/CHANGES.markdown
--- a/CHANGES.markdown
+++ b/CHANGES.markdown
@@ -1,3 +1,11 @@
+## Changes in 0.7 [2018.03.08]
+ - Backported new instances from GHC 8.4/`base-4.11`
+   * `Alternative` instance for `ZipList`
+   * `Data` instance for `IntPtr` and `WordPtr`
+   * `Num`, `Functor`, `Applicative`, `Monad`, `Semigroup`, and `Monoid`
+     instances for `Data.Ord.Down`
+   * `MonadFail`, `Semigroup`, and `Monoid` instances for strict `ST`
+
 ## Changes in 0.6 [2017.04.10]
  - Backported new instances from GHC 8.2/`base-4.10`
    (see https://github.com/haskell-compat/base-orphans/issues/39):
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -33,6 +33,7 @@
 
  * `Alternative`, `MonadPlus`, and `MonadZip` instances for `Proxy`
  * `Alternative`, `Applicative`, `Bounded`, `Data`, `Enum`, `Foldable`, `Functor`, `Ix`, `Monad`, `MonadFix`, `MonadPlus`, `MonadZip`, and `Traversable` instances for data types in `GHC.Generics`
+ * `Alternative`, `Eq`, `Ord`, `Read`, `Show`, `Foldable`, and `Traversable` instances for `ZipList`
  * `Applicative` and `Alternative` instances for `ReadP` and `ReadPrec`
  * `Applicative` instance for strict and lazy `ST`
  * `Applicative`, `Foldable`, `Functor`, `Monad`, and `Traversable` instances for `Complex`,
@@ -40,25 +41,25 @@
  * `Bits` instance for `Bool`
  * `Bits`, `Bounded`, and `Integral` instances for `CDev`
  * `Bits`, `Bounded`, `Enum`, `FiniteBits`, `Floating`, `Fractional`, `Integral`, `IsString`, `Ix`, `Num`, `Real`, `RealFloat`, `RealFrac`, and `Storable` instances for `Const` and `Identity`
- * `Data` instances for `All`, `Any`, and `Const`
+ * `Data` instances for `All`, `Any`, and `Const`, `IntPtr`, and `WordPtr`
  * `Data`, `MonadFix` and `MonadZip` instances for `Alt`, `Dual`, `First`, `Last`,
    `Product`, and `Sum`
  * `Data` and `IsList` instances for `Version`
  * `Eq` and `Ord` instances for `Control.Exception.ErrorCall`
  * `Eq`, `Ord`, `Read`, and `Show` instances for data types in `GHC.Generics`
- * `Eq`, `Ord`, `Read`, `Show`, `Foldable`, and `Traversable` instances for `ZipList`
  * `Eq1`, `Ord1`, `Read1`, and `Show1` instances for `NonEmpty`
  * `Foldable` instance for `Either`, `(,)` and `Const`
  * `Functor` instance for `Handler`, `ArgOrder`, `OptDescr`, and `ArgDescr`
  * `Functor`, `Applicative`, `Alternative`, and `MonadPlus` instances for `ArrowMonad`
  * `Monad` instance for `(,)`
  * `Monad` instance for `WrappedMonad`
+ * `MonadFail`, `Monoid`, and `Semigroup` instances for strict `ST`
  * `MonadZip` instance for `Maybe`
  * `Monoid`, `Eq`, `Ord`, `Read`, and `Show` instances for `Const`
  * `Monoid` instances for `Identity` and `IO`
  * `Num` instance for `Sum` and `Product`
  * `Read` instance for `Fixed`
- * `Read` and `Show` instances for `Down`
+ * `Applicative`, `Functor`, `Monad`, `Monoid`, `Num`, `Read`, `Semigroup`, and `Show` instances for `Down`
  * `Semigroup` instances for `IO`, `Event` and `Lifetime`
  * `Show` instance for `Fingerprint`
  * `Storable` instance for `()`, `Complex`, and `Ratio`
@@ -78,6 +79,8 @@
 
 ## Supported versions of GHC/`base`
 
+ * `ghc-8.4.1`  / `base-4.11.0.0`
+ * `ghc-8.2.2`  / `base-4.10.1.0`
  * `ghc-8.2.1`  / `base-4.10.0.0`
  * `ghc-8.0.2`  / `base-4.9.1.0`
  * `ghc-8.0.1`  / `base-4.9.0.0`
diff --git a/base-orphans.cabal b/base-orphans.cabal
--- a/base-orphans.cabal
+++ b/base-orphans.cabal
@@ -1,9 +1,11 @@
--- This file has been generated from package.yaml by hpack version 0.17.0.
+-- This file has been generated from package.yaml by hpack version 0.27.0.
 --
 -- see: https://github.com/sol/hpack
+--
+-- hash: 41c092a82fb1cbacf3f1eb99d4bdfbdae043e7a56b2a03706c9ea6ece36fda6f
 
 name:                base-orphans
-version:             0.6
+version:             0.7
 synopsis:            Backwards-compatible orphan instances for base
 description:         @base-orphans@ defines orphan instances that mimic instances available in later versions of @base@ to a wider (older) range of compilers. @base-orphans@ does not export anything except the orphan instances themselves and complements @<http://hackage.haskell.org/package/base-compat base-compat>@.
                      See the README for what instances are covered: <https://github.com/haskell-compat/base-orphans#readme>. See also the <https://github.com/haskell-compat/base-orphans#what-is-not-covered what is not covered> section.
@@ -23,10 +25,11 @@
 license-file:        LICENSE
 build-type:          Simple
 cabal-version:       >= 1.10
+tested-with:         GHC == 7.0.1,  GHC == 7.0.2,  GHC == 7.0.3,  GHC == 7.0.4 , GHC == 7.2.1,  GHC == 7.2.2 , GHC == 7.4.1,  GHC == 7.4.2 , GHC == 7.6.1,  GHC == 7.6.2,  GHC == 7.6.3 , GHC == 7.8.1,  GHC == 7.8.2,  GHC == 7.8.3,  GHC == 7.8.4 , GHC == 7.10.1, GHC == 7.10.2, GHC == 7.10.3 , GHC == 8.0.1,  GHC == 8.0.2 , GHC == 8.2.1,  GHC == 8.2.2 , GHC == 8.4.1
 
 extra-source-files:
-  CHANGES.markdown
-  README.markdown
+    CHANGES.markdown
+    README.markdown
 
 source-repository head
   type: git
@@ -34,38 +37,40 @@
 
 library
   hs-source-dirs:
-    src
+      src
   ghc-options: -Wall
   build-depends:
-    base >= 4.3 && < 5,
-    ghc-prim
+      base >=4.3 && <5
+    , ghc-prim
   exposed-modules:
-    Data.Orphans
+      Data.Orphans
   other-modules:
-    Data.Orphans.Prelude
+      Data.Orphans.Prelude
   default-language: Haskell2010
 
 test-suite spec
   type: exitcode-stdio-1.0
   main-is: Spec.hs
   hs-source-dirs:
-    test
+      test
   ghc-options: -Wall
   build-depends:
-    base >= 4.3 && < 5,
-    base-orphans,
-    hspec == 2.*,
-    QuickCheck
+      QuickCheck
+    , base >=4.3 && <5
+    , base-orphans
+    , hspec ==2.*
+  build-tool-depends: hspec-discover:hspec-discover == 2.*
   other-modules:
-    Control.Applicative.OrphansSpec
-    Control.Exception.OrphansSpec
-    Data.Bits.OrphansSpec
-    Data.Foldable.OrphansSpec
-    Data.Monoid.OrphansSpec
-    Data.Traversable.OrphansSpec
-    Data.Version.OrphansSpec
-    Foreign.Storable.OrphansSpec
-    GHC.Fingerprint.OrphansSpec
-    System.Posix.Types.IntWord
-    System.Posix.Types.OrphansSpec
+      Control.Applicative.OrphansSpec
+      Control.Exception.OrphansSpec
+      Data.Bits.OrphansSpec
+      Data.Foldable.OrphansSpec
+      Data.Monoid.OrphansSpec
+      Data.Traversable.OrphansSpec
+      Data.Version.OrphansSpec
+      Foreign.Storable.OrphansSpec
+      GHC.Fingerprint.OrphansSpec
+      System.Posix.Types.IntWord
+      System.Posix.Types.OrphansSpec
+      Paths_base_orphans
   default-language: Haskell2010
diff --git a/src/Data/Orphans.hs b/src/Data/Orphans.hs
--- a/src/Data/Orphans.hs
+++ b/src/Data/Orphans.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE BangPatterns #-}
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DeriveFoldable #-}
@@ -36,10 +37,6 @@
 -}
 module Data.Orphans () where
 
-#if !(MIN_VERSION_base(4,4,0))
-import           Control.Monad.ST as Strict
-#endif
-
 #if __GLASGOW_HASKELL__ >= 701 && !(MIN_VERSION_base(4,9,0))
 import           GHC.Generics as Generics
 #endif
@@ -49,7 +46,6 @@
 #endif
 
 #if !(MIN_VERSION_base(4,9,0))
-import           Data.Data as Data
 import qualified Data.Foldable as F (Foldable(..))
 import           Data.Monoid as Monoid
 import qualified Data.Traversable as T (Traversable(..))
@@ -57,6 +53,18 @@
 import           Text.Read as Read
 #endif
 
+#if MIN_VERSION_base(4,9,0) && !(MIN_VERSION_base(4,11,0))
+import qualified Control.Monad.Fail as Fail (MonadFail(..))
+#endif
+
+#if !(MIN_VERSION_base(4,10,0))
+import           Data.Data as Data
+#endif
+
+#if !(MIN_VERSION_base(4,11,0))
+import           Control.Monad.ST as Strict
+#endif
+
 #if __GLASGOW_HASKELL__ < 710
 import           Control.Exception as Exception
 import           Control.Monad.ST.Lazy as Lazy
@@ -69,7 +77,7 @@
 # endif
 #endif
 
-#if !(MIN_VERSION_base(4,10,0))
+#if !(MIN_VERSION_base(4,11,0))
 import           Data.Orphans.Prelude
 #endif
 
@@ -935,6 +943,83 @@
     (<>) = mappend
     stimes = stimesMonoid
 #  endif
+# endif
+#endif
+
+#if !(MIN_VERSION_base(4,11,0))
+instance Alternative ZipList where
+  empty = ZipList []
+  ZipList xs <|> ZipList ys = ZipList (xs ++ drop (length xs) ys)
+
+deriving instance Monoid a => Monoid (Down a)
+deriving instance Num a => Num (Down a)
+
+instance Functor Down where
+    fmap = coerce
+
+instance Applicative Down where
+    pure = Down
+    (<*>) = coerce
+
+instance Monad Down where
+    return = Down
+    Down a >>= k = k a
+
+instance Monoid a => Monoid (Strict.ST s a) where
+    mempty = pure mempty
+    mappend = liftA2 mappend
+
+# if MIN_VERSION_base(4,9,0)
+instance Fail.MonadFail (Strict.ST s) where
+    fail s = errorWithoutStackTrace s
+
+deriving instance Semigroup a => Semigroup (Down a)
+
+instance Semigroup a => Semigroup (Strict.ST s a) where
+    (<>) = liftA2 (<>)
+# endif
+
+# if MIN_VERSION_base(4,10,0)
+deriving instance Data IntPtr
+deriving instance Data WordPtr
+# else
+-- The constructors for IntPtr and WordPtr aren't exposed on older versions
+-- of base, so we're forced to hand-roll the Data instances here
+instance Data IntPtr where
+  gfoldl k z iptr = z intPtr `k` unIntPtr iptr
+  gunfold k z _ = k (z intPtr)
+  toConstr !_ = cIntPtr
+  dataTypeOf _ = tIntPtr
+
+intPtr :: Int -> IntPtr
+intPtr = unsafeCoerce
+
+unIntPtr :: IntPtr -> Int
+unIntPtr = unsafeCoerce
+
+tIntPtr :: DataType
+tIntPtr = mkDataType "IntPtr" [cIntPtr]
+
+cIntPtr :: Constr
+cIntPtr = mkConstr tIntPtr "IntPtr" [] Data.Prefix
+
+instance Data WordPtr where
+  gfoldl k z wptr = z wordPtr `k` unWordPtr wptr
+  gunfold k z _ = k (z wordPtr)
+  toConstr !_ = cWordPtr
+  dataTypeOf _ = tWordPtr
+
+wordPtr :: Word -> WordPtr
+wordPtr = unsafeCoerce
+
+unWordPtr :: WordPtr -> Word
+unWordPtr = unsafeCoerce
+
+tWordPtr :: DataType
+tWordPtr = mkDataType "WordPtr" [cWordPtr]
+
+cWordPtr :: Constr
+cWordPtr = mkConstr tWordPtr "WordPtr" [] Data.Prefix
 # endif
 #endif
 
diff --git a/src/Data/Orphans/Prelude.hs b/src/Data/Orphans/Prelude.hs
--- a/src/Data/Orphans/Prelude.hs
+++ b/src/Data/Orphans/Prelude.hs
@@ -15,7 +15,7 @@
 Note that this module does not export any modules that could introduce name clashes.
 -}
 module Data.Orphans.Prelude
-#if MIN_VERSION_base(4,10,0)
+#if MIN_VERSION_base(4,11,0)
     () where
 #else
     (module OrphansPrelude, realPart, imagPart) where
@@ -30,7 +30,7 @@
 import Data.Bits as OrphansPrelude
 import Data.Char as OrphansPrelude
 import Data.Complex as OrphansPrelude (Complex(..))
-import Data.Data as OrphansPrelude (Data)
+import Data.Data as OrphansPrelude (Data(..), Constr, DataType, mkConstr, mkDataType)
 import Data.Fixed as OrphansPrelude
 import Data.Int as OrphansPrelude
 import Data.Ix as OrphansPrelude
@@ -42,7 +42,7 @@
 import Foreign.C.Error as OrphansPrelude
 import Foreign.C.Types as OrphansPrelude
 import Foreign.Marshal.Pool as OrphansPrelude
-import Foreign.Ptr as OrphansPrelude (castPtr)
+import Foreign.Ptr as OrphansPrelude
 import Foreign.Storable as OrphansPrelude
 
 import GHC.Base as OrphansPrelude
@@ -75,14 +75,17 @@
 
 # if MIN_VERSION_base(4,4,0)
 import Control.Monad.Zip as OrphansPrelude
-import Data.Typeable.Internal as OrphansPrelude
 import GHC.Fingerprint as OrphansPrelude
 import GHC.IO.Encoding.Failure as OrphansPrelude
 
 #  if !defined(mingw32_HOST_OS) && !defined(__GHCJS__)
 import GHC.Event as OrphansPrelude
 #  endif
+
+# if !(MIN_VERSION_base(4,10,0))
+import Data.Typeable.Internal as OrphansPrelude
 # endif
+# endif
 
 # if MIN_VERSION_base(4,5,0)
 import GHC.Stack as OrphansPrelude
@@ -90,8 +93,11 @@
 # endif
 
 # if MIN_VERSION_base(4,6,0)
+import Data.Ord as OrphansPrelude (Down(..))
 import GHC.GHCi as OrphansPrelude
 import GHC.TypeLits as OrphansPrelude hiding (type (*))
+# else
+import GHC.Exts as OrphansPrelude (Down(..))
 # endif
 
 # if MIN_VERSION_base(4,6,0) && !(MIN_VERSION_base(4,8,2))
