diff --git a/CHANGES.markdown b/CHANGES.markdown
--- a/CHANGES.markdown
+++ b/CHANGES.markdown
@@ -1,3 +1,65 @@
+## Changes in 0.15.0 [2026.01.10]
+ - This coincides with the `base-compat-batteries-0.15.0` release. Refer to the
+   [`base-compat` changelog](https://github.com/haskell-compat/base-compat/blob/master/base-compat/CHANGES.markdown#changes-in-0150-20260110)
+   for more details.
+
+## Changes in 0.14.1 [2024.12.06]
+ - This coincides with the `base-compat-batteries-0.14.1` release. Refer to the
+   [`base-compat-batteries` changelog](https://github.com/haskell-compat/base-compat/blob/master/base-compat-batteries/CHANGES.markdown#changes-in-0141-20241206)
+   for more details.
+ - Drop support for pre-8.0 versions of GHC.
+
+## Changes in 0.14.0 [2024.04.30]
+ - This coincides with the `base-compat-batteries-0.14.0` release. Refer to the
+   [`base-compat-batteries` changelog](https://github.com/haskell-compat/base-compat/blob/master/base-compat-batteries/CHANGES.markdown#changes-in-0140-20240430)
+   for more details.
+
+## Changes in 0.13.1 [2023.10.11]
+ - This coincides with the `base-compat-batteries-0.13.1` release. Refer to the
+   [`base-compat-batteries` changelog](https://github.com/haskell-compat/base-compat/blob/master/base-compat-batteries/CHANGES.markdown#changes-in-0131-20231011)
+   for more details.
+
+## Changes in 0.13.0 [2023.03.10]
+ - This coincides with the `base-compat-0.13.0` release. Refer to the
+   [`base-compat` changelog](https://github.com/haskell-compat/base-compat/blob/master/base-compat/CHANGES.markdown#changes-in-0130-20230310)
+   for more details.
+ - Require `OneTuple-0.4` or later on GHC 7.4+, as that is the first `OneTuple`
+   release to backport the `MkSolo` data constuctor for `Solo`. See
+   `Data.Tuple.Compat`.
+ - Introduce `Data.Foldable1.Compat` and `Data.Bifoldable1.Compat` modules,
+   which correspond to changes made in `base-4.18.0.0`. `base-compat-batteries`
+   uses the `foldable1-classes-compat` library to backport this code to older
+   versions of `base`.
+ - Depend on `bifunctor-classes-compat` to backport the `Bifunctor`,
+   `Bifoldable`, and `Bitraversable` classes instead of the
+   `bifunctors` library, which has more dependencies.
+
+## Changes in 0.12.3 [2023.07.12]
+ - Allow building with `OneTuple-0.4.*`.
+
+## Changes in 0.12.2 [2022.08.11]
+ - This coincides with the `base-compat-0.12.2` release. Refer to the
+   [`base-compat` changelog](https://github.com/haskell-compat/base-compat/blob/master/base-compat/CHANGES.markdown#changes-in-0122-20220811)
+   for more details.
+
+## Changes in 0.12.1 [2021.10.30]
+ - Backport `Solo` to the `Data.Tuple.Compat` module. If using `ghc-prim-0.7.0`
+   or later, `Solo` is taken from `ghc-prim`. If using an older version of
+   `ghc-prim`, `Solo` is taken from the `OneTuple` compatibility library.
+
+ - This coincides with the `base-compat-0.12.1` release. Refer to the
+   [`base-compat` changelog](https://github.com/haskell-compat/base-compat/blob/master/base-compat/CHANGES.markdown#changes-in-0121-20211030)
+   for more details.
+
+## Changes in 0.12.0 [2021.08.29]
+ - `Data.Semigroup.Compat{.Repl.Batteries}` no longer re-exports the `Option`
+   data type or the `option` function, as both have been removed in
+   `base-4.16`.
+
+ - This coincides with the `base-compat-0.12.0` release. Refer to the
+   [`base-compat` changelog](https://github.com/haskell-compat/base-compat/blob/master/base-compat/CHANGES.markdown#changes-in-0120-20210829)
+   for more details.
+
 ## Changes in 0.11.2 [2020.09.30]
  - This coincides with the `base-compat-0.11.2` release. Refer to the
    [`base-compat` changelog](https://github.com/haskell-compat/base-compat/blob/master/base-compat/CHANGES.markdown#changes-in-0112-20200930)
diff --git a/base-compat-batteries.cabal b/base-compat-batteries.cabal
--- a/base-compat-batteries.cabal
+++ b/base-compat-batteries.cabal
@@ -1,5 +1,5 @@
 name:             base-compat-batteries
-version:          0.11.2
+version:          0.15.0
 license:          MIT
 license-file:     LICENSE
 copyright:        (c) 2012-2018 Simon Hengel,
@@ -34,19 +34,21 @@
                   @<https://github.com/haskell-compat/base-compat/blob/master/base-compat/README.markdown#dependencies here>@
                   for a more comprehensive list of differences between
                   @base-compat@ and @base-compat-batteries@.
-tested-with:        GHC == 7.0.4
-                  , GHC == 7.2.2
-                  , GHC == 7.4.2
-                  , GHC == 7.6.3
-                  , GHC == 7.8.4
-                  , GHC == 7.10.3
-                  , GHC == 8.0.2
+extra-source-files: CHANGES.markdown, README.markdown
+tested-with:        GHC == 8.0.2
                   , GHC == 8.2.2
                   , GHC == 8.4.4
                   , GHC == 8.6.5
-                  , GHC == 8.8.3
-                  , GHC == 8.10.1
-extra-source-files: CHANGES.markdown, README.markdown
+                  , GHC == 8.8.4
+                  , GHC == 8.10.7
+                  , GHC == 9.0.2
+                  , GHC == 9.2.8
+                  , GHC == 9.4.8
+                  , GHC == 9.6.7
+                  , GHC == 9.8.4
+                  , GHC == 9.10.3
+                  , GHC == 9.12.2
+                  , GHC == 9.14.1
 
 source-repository head
   type: git
@@ -59,32 +61,22 @@
   default-language:
       Haskell2010
   build-depends:
-      base        >= 4.3 && < 5,
-      base-compat == 0.11.2
-  if !impl(ghc >= 7.8)
-    build-depends:
-      tagged >= 0.8.5 && < 0.9
-  if !impl(ghc >= 7.10)
-    build-depends:
-      nats >= 1.1.2 && < 1.2,
-      void >= 0.7.2 && < 0.8
-  if !impl(ghc >= 8.0)
-    build-depends:
-      fail                >= 4.9.0.0 && < 4.10,
-      semigroups          >= 0.18.4  && < 0.20,
-      transformers        >= 0.2     && < 0.6,
-      transformers-compat >= 0.6     && < 0.7
+      base        >= 4.9 && < 5,
+      base-compat == 0.14.1,
+      ghc-prim
   if !impl(ghc >= 8.2)
     build-depends:
-      bifunctors           >= 5.5.2 && < 5.6,
-      type-equality        >= 1     && < 1.1
+      bifunctor-classes-compat >= 0.1 && < 0.2,
+      type-equality            >= 1   && < 1.1
   if !impl(ghc >= 8.6)
     build-depends:
       contravariant >= 1.5 && < 1.6
+  if !impl(ghc >= 9.6)
+    build-depends:
+      foldable1-classes-compat >= 0.1 && < 0.2,
+      OneTuple                 >= 0.4 && < 0.5
   ghc-options:
-      -fno-warn-duplicate-exports
-  if impl(ghc >= 7.10)
-    ghc-options: -fno-warn-trustworthy-safe
+      -Wno-duplicate-exports -Wno-trustworthy-safe
 
   hs-source-dirs:
       src
@@ -99,6 +91,7 @@
       Control.Monad.ST.Lazy.Unsafe.Compat
       Control.Monad.ST.Unsafe.Compat
       Data.Bifoldable.Compat
+      Data.Bifoldable1.Compat
       Data.Bifunctor.Compat
       Data.Bitraversable.Compat
       Data.Bits.Compat
@@ -106,6 +99,7 @@
       Data.Complex.Compat
       Data.Either.Compat
       Data.Foldable.Compat
+      Data.Foldable1.Compat
       Data.Function.Compat
       Data.Functor.Compat
       Data.Functor.Compose.Compat
@@ -123,6 +117,9 @@
       Data.Semigroup.Compat
       Data.STRef.Compat
       Data.String.Compat
+      Data.Traversable.Compat
+      Data.Tuple.Compat
+      Data.Typeable.Compat
       Data.Type.Coercion.Compat
       Data.Type.Equality.Compat
       Data.Version.Compat
@@ -148,6 +145,7 @@
       System.IO.Error.Compat
       System.IO.Unsafe.Compat
       Text.Read.Compat
+      Text.Read.Lex.Compat
       Type.Reflection.Compat
 
       Control.Concurrent.Compat.Repl.Batteries
@@ -159,6 +157,7 @@
       Control.Monad.ST.Lazy.Unsafe.Compat.Repl.Batteries
       Control.Monad.ST.Unsafe.Compat.Repl.Batteries
       Data.Bifoldable.Compat.Repl.Batteries
+      Data.Bifoldable1.Compat.Repl.Batteries
       Data.Bifunctor.Compat.Repl.Batteries
       Data.Bitraversable.Compat.Repl.Batteries
       Data.Bits.Compat.Repl.Batteries
@@ -166,6 +165,7 @@
       Data.Complex.Compat.Repl.Batteries
       Data.Either.Compat.Repl.Batteries
       Data.Foldable.Compat.Repl.Batteries
+      Data.Foldable1.Compat.Repl.Batteries
       Data.Function.Compat.Repl.Batteries
       Data.Functor.Compat.Repl.Batteries
       Data.Functor.Compose.Compat.Repl.Batteries
@@ -183,6 +183,9 @@
       Data.Semigroup.Compat.Repl.Batteries
       Data.STRef.Compat.Repl.Batteries
       Data.String.Compat.Repl.Batteries
+      Data.Traversable.Compat.Repl.Batteries
+      Data.Tuple.Compat.Repl.Batteries
+      Data.Typeable.Compat.Repl.Batteries
       Data.Type.Coercion.Compat.Repl.Batteries
       Data.Type.Equality.Compat.Repl.Batteries
       Data.Version.Compat.Repl.Batteries
@@ -208,6 +211,7 @@
       System.IO.Error.Compat.Repl.Batteries
       System.IO.Unsafe.Compat.Repl.Batteries
       Text.Read.Compat.Repl.Batteries
+      Text.Read.Lex.Compat.Repl.Batteries
       Type.Reflection.Compat.Repl.Batteries
 test-suite spec
   type:
@@ -245,7 +249,7 @@
       SafeHaskellSpec
       TestHspecTrustworthy
   build-depends:
-      base >= 4.3 && < 5
+      base >= 4.9 && < 5
     , base-compat-batteries
     , hspec >= 1.8
     , QuickCheck
diff --git a/src/Control/Concurrent/Compat/Repl/Batteries.hs b/src/Control/Concurrent/Compat/Repl/Batteries.hs
--- a/src/Control/Concurrent/Compat/Repl/Batteries.hs
+++ b/src/Control/Concurrent/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Control.Concurrent.Compat"
 -- from a globally unique namespace.
 module Control.Concurrent.Compat.Repl.Batteries (
diff --git a/src/Control/Concurrent/MVar/Compat/Repl/Batteries.hs b/src/Control/Concurrent/MVar/Compat/Repl/Batteries.hs
--- a/src/Control/Concurrent/MVar/Compat/Repl/Batteries.hs
+++ b/src/Control/Concurrent/MVar/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Control.Concurrent.MVar.Compat"
 -- from a globally unique namespace.
 module Control.Concurrent.MVar.Compat.Repl.Batteries (
diff --git a/src/Control/Exception/Compat/Repl/Batteries.hs b/src/Control/Exception/Compat/Repl/Batteries.hs
--- a/src/Control/Exception/Compat/Repl/Batteries.hs
+++ b/src/Control/Exception/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Control.Exception.Compat"
 -- from a globally unique namespace.
 module Control.Exception.Compat.Repl.Batteries (
diff --git a/src/Control/Monad/Compat/Repl/Batteries.hs b/src/Control/Monad/Compat/Repl/Batteries.hs
--- a/src/Control/Monad/Compat/Repl/Batteries.hs
+++ b/src/Control/Monad/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Control.Monad.Compat"
 -- from a globally unique namespace.
 module Control.Monad.Compat.Repl.Batteries (
diff --git a/src/Control/Monad/Fail/Compat.hs b/src/Control/Monad/Fail/Compat.hs
--- a/src/Control/Monad/Fail/Compat.hs
+++ b/src/Control/Monad/Fail/Compat.hs
@@ -1,10 +1,6 @@
-{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE NoImplicitPrelude, PackageImports #-}
 module Control.Monad.Fail.Compat (
   module Base
 ) where
 
-#if MIN_VERSION_base(4,9,0)
 import "base-compat" Control.Monad.Fail.Compat as Base
-#else
-import "fail" Control.Monad.Fail as Base
-#endif
diff --git a/src/Control/Monad/Fail/Compat/Repl/Batteries.hs b/src/Control/Monad/Fail/Compat/Repl/Batteries.hs
--- a/src/Control/Monad/Fail/Compat/Repl/Batteries.hs
+++ b/src/Control/Monad/Fail/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Control.Monad.Fail.Compat"
 -- from a globally unique namespace.
 module Control.Monad.Fail.Compat.Repl.Batteries (
diff --git a/src/Control/Monad/IO/Class/Compat.hs b/src/Control/Monad/IO/Class/Compat.hs
--- a/src/Control/Monad/IO/Class/Compat.hs
+++ b/src/Control/Monad/IO/Class/Compat.hs
@@ -1,10 +1,6 @@
-{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE NoImplicitPrelude, PackageImports #-}
 module Control.Monad.IO.Class.Compat (
   module Base
 ) where
 
-#if MIN_VERSION_base(4,9,0)
 import "base-compat" Control.Monad.IO.Class.Compat as Base
-#else
-import Control.Monad.IO.Class as Base
-#endif
diff --git a/src/Control/Monad/IO/Class/Compat/Repl/Batteries.hs b/src/Control/Monad/IO/Class/Compat/Repl/Batteries.hs
--- a/src/Control/Monad/IO/Class/Compat/Repl/Batteries.hs
+++ b/src/Control/Monad/IO/Class/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Control.Monad.IO.Class.Compat"
 -- from a globally unique namespace.
 module Control.Monad.IO.Class.Compat.Repl.Batteries (
diff --git a/src/Control/Monad/ST/Lazy/Unsafe/Compat/Repl/Batteries.hs b/src/Control/Monad/ST/Lazy/Unsafe/Compat/Repl/Batteries.hs
--- a/src/Control/Monad/ST/Lazy/Unsafe/Compat/Repl/Batteries.hs
+++ b/src/Control/Monad/ST/Lazy/Unsafe/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Control.Monad.ST.Lazy.Unsafe.Compat"
 -- from a globally unique namespace.
 module Control.Monad.ST.Lazy.Unsafe.Compat.Repl.Batteries (
diff --git a/src/Control/Monad/ST/Unsafe/Compat/Repl/Batteries.hs b/src/Control/Monad/ST/Unsafe/Compat/Repl/Batteries.hs
--- a/src/Control/Monad/ST/Unsafe/Compat/Repl/Batteries.hs
+++ b/src/Control/Monad/ST/Unsafe/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Control.Monad.ST.Unsafe.Compat"
 -- from a globally unique namespace.
 module Control.Monad.ST.Unsafe.Compat.Repl.Batteries (
diff --git a/src/Data/Bifoldable/Compat.hs b/src/Data/Bifoldable/Compat.hs
--- a/src/Data/Bifoldable/Compat.hs
+++ b/src/Data/Bifoldable/Compat.hs
@@ -6,5 +6,5 @@
 #if MIN_VERSION_base(4,10,0)
 import "base-compat" Data.Bifoldable.Compat as Base
 #else
-import "bifunctors" Data.Bifoldable as Base
+import "bifunctor-classes-compat" Data.Bifoldable as Base
 #endif
diff --git a/src/Data/Bifoldable/Compat/Repl/Batteries.hs b/src/Data/Bifoldable/Compat/Repl/Batteries.hs
--- a/src/Data/Bifoldable/Compat/Repl/Batteries.hs
+++ b/src/Data/Bifoldable/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Bifoldable.Compat"
 -- from a globally unique namespace.
 module Data.Bifoldable.Compat.Repl.Batteries (
diff --git a/src/Data/Bifoldable1/Compat.hs b/src/Data/Bifoldable1/Compat.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Bifoldable1/Compat.hs
@@ -0,0 +1,10 @@
+{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+module Data.Bifoldable1.Compat (
+  module Base
+) where
+
+#if MIN_VERSION_base(4,18,0)
+import "base-compat" Data.Bifoldable1.Compat as Base
+#else
+import "foldable1-classes-compat" Data.Bifoldable1 as Base
+#endif
diff --git a/src/Data/Bifoldable1/Compat/Repl/Batteries.hs b/src/Data/Bifoldable1/Compat/Repl/Batteries.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Bifoldable1/Compat/Repl/Batteries.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE PackageImports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
+-- | Reexports "Data.Bifoldable1.Compat"
+-- from a globally unique namespace.
+module Data.Bifoldable1.Compat.Repl.Batteries (
+  module Data.Bifoldable1.Compat
+) where
+import "this" Data.Bifoldable1.Compat
diff --git a/src/Data/Bifunctor/Compat.hs b/src/Data/Bifunctor/Compat.hs
--- a/src/Data/Bifunctor/Compat.hs
+++ b/src/Data/Bifunctor/Compat.hs
@@ -1,10 +1,6 @@
-{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE NoImplicitPrelude, PackageImports #-}
 module Data.Bifunctor.Compat (
   module Base
 ) where
 
-#if MIN_VERSION_base(4,8,0)
 import "base-compat" Data.Bifunctor.Compat as Base
-#else
-import "bifunctors" Data.Bifunctor as Base
-#endif
diff --git a/src/Data/Bifunctor/Compat/Repl/Batteries.hs b/src/Data/Bifunctor/Compat/Repl/Batteries.hs
--- a/src/Data/Bifunctor/Compat/Repl/Batteries.hs
+++ b/src/Data/Bifunctor/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Bifunctor.Compat"
 -- from a globally unique namespace.
 module Data.Bifunctor.Compat.Repl.Batteries (
diff --git a/src/Data/Bitraversable/Compat.hs b/src/Data/Bitraversable/Compat.hs
--- a/src/Data/Bitraversable/Compat.hs
+++ b/src/Data/Bitraversable/Compat.hs
@@ -1,10 +1,69 @@
 {-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
 module Data.Bitraversable.Compat (
   module Base
+, firstA
+, secondA
 ) where
 
 #if MIN_VERSION_base(4,10,0)
 import "base-compat" Data.Bitraversable.Compat as Base
 #else
-import "bifunctors" Data.Bitraversable as Base
+import "bifunctor-classes-compat" Data.Bitraversable as Base
+import Prelude.Compat
+#endif
+
+#if !MIN_VERSION_base(4,10,0)
+-- | Traverses only over the first argument.
+--
+-- @'firstA' f ≡ 'bitraverse' f 'pure'@
+
+-- ==== __Examples__
+--
+-- Basic usage:
+--
+-- >>> firstA listToMaybe (Left [])
+-- Nothing
+--
+-- >>> firstA listToMaybe (Left [1, 2, 3])
+-- Just (Left 1)
+--
+-- >>> firstA listToMaybe (Right [4, 5])
+-- Just (Right [4, 5])
+--
+-- >>> firstA listToMaybe ([1, 2, 3], [4, 5])
+-- Just (1,[4, 5])
+--
+-- >>> firstA listToMaybe ([], [4, 5])
+-- Nothing
+
+-- @since 4.21.0.0
+firstA :: Bitraversable t => Applicative f => (a -> f c) -> t a b -> f (t c b)
+firstA f = bitraverse f pure
+
+-- | Traverses only over the second argument.
+--
+-- @'secondA' f ≡ 'bitraverse' 'pure' f@
+--
+-- ==== __Examples__
+--
+-- Basic usage:
+--
+-- >>> secondA (find odd) (Left [])
+-- Just (Left [])
+--
+-- >>> secondA (find odd) (Left [1, 2, 3])
+-- Just (Left [1,2,3])
+--
+-- >>> secondA (find odd) (Right [4, 5])
+-- Just (Right 5)
+--
+-- >>> secondA (find odd) ([1, 2, 3], [4, 5])
+-- Just ([1,2,3],5)
+--
+-- >>> secondA (find odd) ([1,2,3], [4])
+-- Nothing
+--
+-- @since 4.21.0.0
+secondA :: Bitraversable t => Applicative f => (b -> f c) -> t a b -> f (t a c)
+secondA f = bitraverse pure f
 #endif
diff --git a/src/Data/Bitraversable/Compat/Repl/Batteries.hs b/src/Data/Bitraversable/Compat/Repl/Batteries.hs
--- a/src/Data/Bitraversable/Compat/Repl/Batteries.hs
+++ b/src/Data/Bitraversable/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Bitraversable.Compat"
 -- from a globally unique namespace.
 module Data.Bitraversable.Compat.Repl.Batteries (
diff --git a/src/Data/Bits/Compat/Repl/Batteries.hs b/src/Data/Bits/Compat/Repl/Batteries.hs
--- a/src/Data/Bits/Compat/Repl/Batteries.hs
+++ b/src/Data/Bits/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Bits.Compat"
 -- from a globally unique namespace.
 module Data.Bits.Compat.Repl.Batteries (
diff --git a/src/Data/Bool/Compat/Repl/Batteries.hs b/src/Data/Bool/Compat/Repl/Batteries.hs
--- a/src/Data/Bool/Compat/Repl/Batteries.hs
+++ b/src/Data/Bool/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Bool.Compat"
 -- from a globally unique namespace.
 module Data.Bool.Compat.Repl.Batteries (
diff --git a/src/Data/Complex/Compat/Repl/Batteries.hs b/src/Data/Complex/Compat/Repl/Batteries.hs
--- a/src/Data/Complex/Compat/Repl/Batteries.hs
+++ b/src/Data/Complex/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Complex.Compat"
 -- from a globally unique namespace.
 module Data.Complex.Compat.Repl.Batteries (
diff --git a/src/Data/Either/Compat/Repl/Batteries.hs b/src/Data/Either/Compat/Repl/Batteries.hs
--- a/src/Data/Either/Compat/Repl/Batteries.hs
+++ b/src/Data/Either/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Either.Compat"
 -- from a globally unique namespace.
 module Data.Either.Compat.Repl.Batteries (
diff --git a/src/Data/Foldable/Compat/Repl/Batteries.hs b/src/Data/Foldable/Compat/Repl/Batteries.hs
--- a/src/Data/Foldable/Compat/Repl/Batteries.hs
+++ b/src/Data/Foldable/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Foldable.Compat"
 -- from a globally unique namespace.
 module Data.Foldable.Compat.Repl.Batteries (
diff --git a/src/Data/Foldable1/Compat.hs b/src/Data/Foldable1/Compat.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Foldable1/Compat.hs
@@ -0,0 +1,10 @@
+{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+module Data.Foldable1.Compat (
+  module Base
+) where
+
+#if MIN_VERSION_base(4,18,0)
+import "base-compat" Data.Foldable1.Compat as Base
+#else
+import "foldable1-classes-compat" Data.Foldable1 as Base
+#endif
diff --git a/src/Data/Foldable1/Compat/Repl/Batteries.hs b/src/Data/Foldable1/Compat/Repl/Batteries.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Foldable1/Compat/Repl/Batteries.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE PackageImports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
+-- | Reexports "Data.Foldable1.Compat"
+-- from a globally unique namespace.
+module Data.Foldable1.Compat.Repl.Batteries (
+  module Data.Foldable1.Compat
+) where
+import "this" Data.Foldable1.Compat
diff --git a/src/Data/Function/Compat/Repl/Batteries.hs b/src/Data/Function/Compat/Repl/Batteries.hs
--- a/src/Data/Function/Compat/Repl/Batteries.hs
+++ b/src/Data/Function/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Function.Compat"
 -- from a globally unique namespace.
 module Data.Function.Compat.Repl.Batteries (
diff --git a/src/Data/Functor/Compat.hs b/src/Data/Functor/Compat.hs
--- a/src/Data/Functor/Compat.hs
+++ b/src/Data/Functor/Compat.hs
@@ -1,51 +1,6 @@
-{-# LANGUAGE CPP, NoImplicitPrelude #-}
+{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
 module Data.Functor.Compat (
   module Base
-, Functor(..)
-, ($>)
-, void
-, (<&>)
 ) where
-import Data.Functor as Base
 
-#if !(MIN_VERSION_base(4,7,0))
-import Control.Monad.Compat (void)
-import Data.Function (flip)
-#endif
-
-#if !(MIN_VERSION_base(4,7,0))
-infixl 4 $>
-
--- | Flipped version of '$>'.
---
--- /Since: 4.7.0.0/
-($>) :: Functor f => f a -> b -> f b
-($>) = flip (<$)
-#endif
-
-#if !(MIN_VERSION_base(4,11,0))
--- | Flipped version of '<$>'.
---
--- @
--- ('<&>') = 'flip' 'fmap'
--- @
---
--- /Since: 4.11.0.0/
---
--- ==== __Examples__
--- Apply @(+1)@ to a list, a 'Data.Maybe.Just' and a 'Data.Either.Right':
---
--- >>> Just 2 <&> (+1)
--- Just 3
---
--- >>> [1,2,3] <&> (+1)
--- [2,3,4]
---
--- >>> Right 3 <&> (+1)
--- Right 4
---
-(<&>) :: Functor f => f a -> (a -> b) -> f b
-as <&> f = f <$> as
-
-infixl 1 <&>
-#endif
+import "base-compat" Data.Functor.Compat as Base
diff --git a/src/Data/Functor/Compat/Repl/Batteries.hs b/src/Data/Functor/Compat/Repl/Batteries.hs
--- a/src/Data/Functor/Compat/Repl/Batteries.hs
+++ b/src/Data/Functor/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Functor.Compat"
 -- from a globally unique namespace.
 module Data.Functor.Compat.Repl.Batteries (
diff --git a/src/Data/Functor/Compose/Compat.hs b/src/Data/Functor/Compose/Compat.hs
--- a/src/Data/Functor/Compose/Compat.hs
+++ b/src/Data/Functor/Compose/Compat.hs
@@ -1,10 +1,6 @@
-{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE NoImplicitPrelude, PackageImports #-}
 module Data.Functor.Compose.Compat (
   module Base
 ) where
 
-#if MIN_VERSION_base(4,9,0)
 import "base-compat" Data.Functor.Compose.Compat as Base
-#else
-import Data.Functor.Compose as Base
-#endif
diff --git a/src/Data/Functor/Compose/Compat/Repl/Batteries.hs b/src/Data/Functor/Compose/Compat/Repl/Batteries.hs
--- a/src/Data/Functor/Compose/Compat/Repl/Batteries.hs
+++ b/src/Data/Functor/Compose/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Functor.Compose.Compat"
 -- from a globally unique namespace.
 module Data.Functor.Compose.Compat.Repl.Batteries (
diff --git a/src/Data/Functor/Const/Compat/Repl/Batteries.hs b/src/Data/Functor/Const/Compat/Repl/Batteries.hs
--- a/src/Data/Functor/Const/Compat/Repl/Batteries.hs
+++ b/src/Data/Functor/Const/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Functor.Const.Compat"
 -- from a globally unique namespace.
 module Data.Functor.Const.Compat.Repl.Batteries (
diff --git a/src/Data/Functor/Contravariant/Compat/Repl/Batteries.hs b/src/Data/Functor/Contravariant/Compat/Repl/Batteries.hs
--- a/src/Data/Functor/Contravariant/Compat/Repl/Batteries.hs
+++ b/src/Data/Functor/Contravariant/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Functor.Contravariant.Compat"
 -- from a globally unique namespace.
 module Data.Functor.Contravariant.Compat.Repl.Batteries (
diff --git a/src/Data/Functor/Identity/Compat.hs b/src/Data/Functor/Identity/Compat.hs
--- a/src/Data/Functor/Identity/Compat.hs
+++ b/src/Data/Functor/Identity/Compat.hs
@@ -1,10 +1,6 @@
-{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE NoImplicitPrelude, PackageImports #-}
 module Data.Functor.Identity.Compat (
   module Base
 ) where
 
-#if MIN_VERSION_base(4,8,0)
 import "base-compat" Data.Functor.Identity.Compat as Base
-#else
-import Data.Functor.Identity as Base
-#endif
diff --git a/src/Data/Functor/Identity/Compat/Repl/Batteries.hs b/src/Data/Functor/Identity/Compat/Repl/Batteries.hs
--- a/src/Data/Functor/Identity/Compat/Repl/Batteries.hs
+++ b/src/Data/Functor/Identity/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Functor.Identity.Compat"
 -- from a globally unique namespace.
 module Data.Functor.Identity.Compat.Repl.Batteries (
diff --git a/src/Data/Functor/Product/Compat.hs b/src/Data/Functor/Product/Compat.hs
--- a/src/Data/Functor/Product/Compat.hs
+++ b/src/Data/Functor/Product/Compat.hs
@@ -1,10 +1,6 @@
-{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE NoImplicitPrelude, PackageImports #-}
 module Data.Functor.Product.Compat (
   module Base
 ) where
 
-#if MIN_VERSION_base(4,9,0)
 import "base-compat" Data.Functor.Product.Compat as Base
-#else
-import Data.Functor.Product as Base
-#endif
diff --git a/src/Data/Functor/Product/Compat/Repl/Batteries.hs b/src/Data/Functor/Product/Compat/Repl/Batteries.hs
--- a/src/Data/Functor/Product/Compat/Repl/Batteries.hs
+++ b/src/Data/Functor/Product/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Functor.Product.Compat"
 -- from a globally unique namespace.
 module Data.Functor.Product.Compat.Repl.Batteries (
diff --git a/src/Data/Functor/Sum/Compat.hs b/src/Data/Functor/Sum/Compat.hs
--- a/src/Data/Functor/Sum/Compat.hs
+++ b/src/Data/Functor/Sum/Compat.hs
@@ -1,10 +1,6 @@
-{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE NoImplicitPrelude, PackageImports #-}
 module Data.Functor.Sum.Compat (
   module Base
 ) where
 
-#if MIN_VERSION_base(4,9,0)
 import "base-compat" Data.Functor.Sum.Compat as Base
-#else
-import Data.Functor.Sum as Base
-#endif
diff --git a/src/Data/Functor/Sum/Compat/Repl/Batteries.hs b/src/Data/Functor/Sum/Compat/Repl/Batteries.hs
--- a/src/Data/Functor/Sum/Compat/Repl/Batteries.hs
+++ b/src/Data/Functor/Sum/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Functor.Sum.Compat"
 -- from a globally unique namespace.
 module Data.Functor.Sum.Compat.Repl.Batteries (
diff --git a/src/Data/IORef/Compat/Repl/Batteries.hs b/src/Data/IORef/Compat/Repl/Batteries.hs
--- a/src/Data/IORef/Compat/Repl/Batteries.hs
+++ b/src/Data/IORef/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.IORef.Compat"
 -- from a globally unique namespace.
 module Data.IORef.Compat.Repl.Batteries (
diff --git a/src/Data/List/Compat/Repl/Batteries.hs b/src/Data/List/Compat/Repl/Batteries.hs
--- a/src/Data/List/Compat/Repl/Batteries.hs
+++ b/src/Data/List/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.List.Compat"
 -- from a globally unique namespace.
 module Data.List.Compat.Repl.Batteries (
diff --git a/src/Data/List/NonEmpty/Compat.hs b/src/Data/List/NonEmpty/Compat.hs
--- a/src/Data/List/NonEmpty/Compat.hs
+++ b/src/Data/List/NonEmpty/Compat.hs
@@ -1,85 +1,82 @@
-{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE NoImplicitPrelude, PackageImports #-}
 module Data.List.NonEmpty.Compat (
   -- * The type of non-empty streams
     NonEmpty(..)
 
   -- * Non-empty stream transformations
-  , map         
-  , intersperse 
-  , scanl       
-  , scanr       
-  , scanl1      
-  , scanr1      
-  , transpose   
-  , sortBy      
-  , sortWith      
+  , map
+  , intersperse
+  , scanl
+  , scanr
+  , scanl1
+  , scanr1
+  , transpose
+  , sortBy
+  , sortWith
   -- * Basic functions
-  , length      
-  , head        
-  , tail        
-  , last        
-  , init        
+  , length
+  , compareLength
+  , head
+  , tail
+  , last
+  , init
   , singleton
-  , (<|), cons  
-  , uncons      
-  , unfoldr     
-  , sort        
-  , reverse     
-  , inits       
-  , tails       
+  , (<|), cons
+  , uncons
+  , unfoldr
+  , sort
+  , sortOn
+  , reverse
+  , inits
+  , inits1
+  , tails
+  , tails1
+  , append
+  , appendList
+  , prependList
   -- * Building streams
-  , iterate     
-  , repeat      
-  , cycle       
-  , unfold      
-  , insert      
-  , some1       
+  , iterate
+  , repeat
+  , cycle
+  , unfold
+  , insert
+  , some1
   -- * Extracting sublists
-  , take        
-  , drop        
-  , splitAt     
-  , takeWhile   
-  , dropWhile   
-  , span        
-  , break       
-  , filter      
-  , partition   
-  , group       
-  , groupBy     
-  , groupWith     
-  , groupAllWith  
-  , group1      
-  , groupBy1    
-  , groupWith1     
-  , groupAllWith1  
+  , take
+  , drop
+  , splitAt
+  , takeWhile
+  , dropWhile
+  , span
+  , break
+  , filter
+  , partition
+  , group
+  , groupBy
+  , groupWith
+  , groupAllWith
+  , group1
+  , groupBy1
+  , groupWith1
+  , groupAllWith1
+  , permutations
+  , permutations1
   -- * Sublist predicates
-  , isPrefixOf  
+  , isPrefixOf
   -- * \"Set\" operations
-  , nub         
-  , nubBy       
+  , nub
+  , nubBy
   -- * Indexing streams
-  , (!!)        
+  , (!!)
   -- * Zipping and unzipping streams
-  , zip         
-  , zipWith     
-  , unzip       
+  , zip
+  , zipWith
+  , unzip
   -- * Converting to and from a list
-  , fromList    
-  , toList      
-  , nonEmpty    
-  , xor         
+  , fromList
+  , toList
+  , nonEmpty
+  , xor
 ) where
 
-#if MIN_VERSION_base(4,9,0)
 import "base-compat" Data.List.NonEmpty.Compat
-#else
-import "semigroups" Data.List.NonEmpty
-#endif
-
-#if !(MIN_VERSION_base(4,9,0))
--- | Construct a 'NonEmpty' list from a single element.
---
--- /Since: 4.15/
-singleton :: a -> NonEmpty a
-singleton a = a :| []
-#endif
diff --git a/src/Data/List/NonEmpty/Compat/Repl/Batteries.hs b/src/Data/List/NonEmpty/Compat/Repl/Batteries.hs
--- a/src/Data/List/NonEmpty/Compat/Repl/Batteries.hs
+++ b/src/Data/List/NonEmpty/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.List.NonEmpty.Compat"
 -- from a globally unique namespace.
 module Data.List.NonEmpty.Compat.Repl.Batteries (
diff --git a/src/Data/Monoid/Compat/Repl/Batteries.hs b/src/Data/Monoid/Compat/Repl/Batteries.hs
--- a/src/Data/Monoid/Compat/Repl/Batteries.hs
+++ b/src/Data/Monoid/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Monoid.Compat"
 -- from a globally unique namespace.
 module Data.Monoid.Compat.Repl.Batteries (
diff --git a/src/Data/Proxy/Compat.hs b/src/Data/Proxy/Compat.hs
--- a/src/Data/Proxy/Compat.hs
+++ b/src/Data/Proxy/Compat.hs
@@ -1,10 +1,6 @@
-{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE NoImplicitPrelude, PackageImports #-}
 module Data.Proxy.Compat (
   module Base
 ) where
 
-#if MIN_VERSION_base(4,7,0)
 import "base-compat" Data.Proxy.Compat as Base
-#else
-import "tagged" Data.Proxy as Base
-#endif
diff --git a/src/Data/Proxy/Compat/Repl/Batteries.hs b/src/Data/Proxy/Compat/Repl/Batteries.hs
--- a/src/Data/Proxy/Compat/Repl/Batteries.hs
+++ b/src/Data/Proxy/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Proxy.Compat"
 -- from a globally unique namespace.
 module Data.Proxy.Compat.Repl.Batteries (
diff --git a/src/Data/Ratio/Compat/Repl/Batteries.hs b/src/Data/Ratio/Compat/Repl/Batteries.hs
--- a/src/Data/Ratio/Compat/Repl/Batteries.hs
+++ b/src/Data/Ratio/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Ratio.Compat"
 -- from a globally unique namespace.
 module Data.Ratio.Compat.Repl.Batteries (
diff --git a/src/Data/STRef/Compat/Repl/Batteries.hs b/src/Data/STRef/Compat/Repl/Batteries.hs
--- a/src/Data/STRef/Compat/Repl/Batteries.hs
+++ b/src/Data/STRef/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.STRef.Compat"
 -- from a globally unique namespace.
 module Data.STRef.Compat.Repl.Batteries (
diff --git a/src/Data/Semigroup/Compat.hs b/src/Data/Semigroup/Compat.hs
--- a/src/Data/Semigroup/Compat.hs
+++ b/src/Data/Semigroup/Compat.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE NoImplicitPrelude, PackageImports #-}
 module Data.Semigroup.Compat (
     Semigroup(..)
   , stimesMonoid
@@ -18,9 +18,6 @@
   , Any(..)
   , Sum(..)
   , Product(..)
-  -- * A better monoid for Maybe
-  , Option(..)
-  , option
   -- * Difference lists of a semigroup
   , diff
   , cycle1
@@ -30,8 +27,4 @@
   , ArgMax
   ) where
 
-#if MIN_VERSION_base(4,9,0)
 import "base-compat" Data.Semigroup.Compat
-#else
-import "semigroups" Data.Semigroup
-#endif
diff --git a/src/Data/Semigroup/Compat/Repl/Batteries.hs b/src/Data/Semigroup/Compat/Repl/Batteries.hs
--- a/src/Data/Semigroup/Compat/Repl/Batteries.hs
+++ b/src/Data/Semigroup/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Semigroup.Compat"
 -- from a globally unique namespace.
 module Data.Semigroup.Compat.Repl.Batteries (
diff --git a/src/Data/String/Compat/Repl/Batteries.hs b/src/Data/String/Compat/Repl/Batteries.hs
--- a/src/Data/String/Compat/Repl/Batteries.hs
+++ b/src/Data/String/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.String.Compat"
 -- from a globally unique namespace.
 module Data.String.Compat.Repl.Batteries (
diff --git a/src/Data/Traversable/Compat.hs b/src/Data/Traversable/Compat.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Traversable/Compat.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+module Data.Traversable.Compat (
+  module Base
+) where
+
+import "base-compat" Data.Traversable.Compat as Base
diff --git a/src/Data/Traversable/Compat/Repl/Batteries.hs b/src/Data/Traversable/Compat/Repl/Batteries.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Traversable/Compat/Repl/Batteries.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE PackageImports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
+-- | Reexports "Data.Traversable.Compat"
+-- from a globally unique namespace.
+module Data.Traversable.Compat.Repl.Batteries (
+  module Data.Traversable.Compat
+) where
+import "this" Data.Traversable.Compat
diff --git a/src/Data/Tuple/Compat.hs b/src/Data/Tuple/Compat.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Tuple/Compat.hs
@@ -0,0 +1,34 @@
+{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE PatternSynonyms #-}
+-- | This uses the @OneTuple@ compatibility library to backport 'Solo' to old
+-- versions of GHC.
+module Data.Tuple.Compat
+  (
+#if MIN_VERSION_ghc_prim(0,10,0)
+    Solo(MkSolo, Solo)
+#elif MIN_VERSION_ghc_prim(0,7,0)
+    Solo(Solo)
+  , pattern MkSolo
+#else
+    Solo(MkSolo, Solo)
+#endif
+  , getSolo
+  , fst
+  , snd
+  , curry
+  , uncurry
+  , swap
+  ) where
+
+#if MIN_VERSION_ghc_prim(0,10,0)
+import "base-compat" Data.Tuple.Compat
+#elif MIN_VERSION_ghc_prim(0,8,0)
+import "base-compat" Data.Tuple.Compat
+import "OneTuple" Data.Tuple.Solo (pattern MkSolo)
+#elif MIN_VERSION_ghc_prim(0,7,0)
+import "base-compat" Data.Tuple.Compat
+import "OneTuple" Data.Tuple.Solo (pattern MkSolo, getSolo)
+#else
+import "base" Data.Tuple
+import "OneTuple" Data.Tuple.Solo
+#endif
diff --git a/src/Data/Tuple/Compat/Repl/Batteries.hs b/src/Data/Tuple/Compat/Repl/Batteries.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Tuple/Compat/Repl/Batteries.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE PackageImports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
+-- | Reexports "Data.Tuple.Compat"
+-- from a globally unique namespace.
+module Data.Tuple.Compat.Repl.Batteries (
+  module Data.Tuple.Compat
+) where
+import "this" Data.Tuple.Compat
diff --git a/src/Data/Type/Coercion/Compat.hs b/src/Data/Type/Coercion/Compat.hs
--- a/src/Data/Type/Coercion/Compat.hs
+++ b/src/Data/Type/Coercion/Compat.hs
@@ -1,10 +1,6 @@
-{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE NoImplicitPrelude, PackageImports #-}
 module Data.Type.Coercion.Compat (
-#if MIN_VERSION_base(4,7,0)
   module Base
-#endif
 ) where
 
-#if MIN_VERSION_base(4,7,0)
 import "base-compat" Data.Type.Coercion.Compat as Base
-#endif
diff --git a/src/Data/Type/Coercion/Compat/Repl/Batteries.hs b/src/Data/Type/Coercion/Compat/Repl/Batteries.hs
--- a/src/Data/Type/Coercion/Compat/Repl/Batteries.hs
+++ b/src/Data/Type/Coercion/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Type.Coercion.Compat"
 -- from a globally unique namespace.
 module Data.Type.Coercion.Compat.Repl.Batteries (
diff --git a/src/Data/Type/Equality/Compat.hs b/src/Data/Type/Equality/Compat.hs
--- a/src/Data/Type/Equality/Compat.hs
+++ b/src/Data/Type/Equality/Compat.hs
@@ -1,45 +1,27 @@
 {-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
-#if __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE Trustworthy #-}
-#endif
-#if __GLASGOW_HASKELL__ >= 708
 {-# LANGUAGE ExplicitNamespaces #-}
-#endif
 module Data.Type.Equality.Compat (
   -- * The equality types
   (:~:)(..),
-#if __GLASGOW_HASKELL__ >= 800
   type (~~),
-#endif
-#if __GLASGOW_HASKELL__ >= 800
   (:~~:)(..),
-#endif
 
   -- * Working with equality
   sym, trans, castWith, gcastWith,
-#if __GLASGOW_HASKELL__ >= 706
-    apply,
-#endif
-    inner,
-#if __GLASGOW_HASKELL__ >= 706
-    outer,
-#endif
+  apply,
+  inner,
+  outer,
 
   -- * Inferring equality from other types
   TestEquality(..),
 
-#if __GLASGOW_HASKELL__ >= 708
   -- * Boolean type-level equality
   type (==),
-#endif
 ) where
 
-#if MIN_VERSION_base(4,7,0)
 import "base" Data.Type.Equality
-#else
-import "type-equality" Data.Type.Equality
-#endif
 
-#if MIN_VERSION_base(4,9,0) && !MIN_VERSION_base(4,10,0)
+#if !MIN_VERSION_base(4,10,0)
 import "type-equality" Data.Type.Equality.Hetero
 #endif
diff --git a/src/Data/Type/Equality/Compat/Repl/Batteries.hs b/src/Data/Type/Equality/Compat/Repl/Batteries.hs
--- a/src/Data/Type/Equality/Compat/Repl/Batteries.hs
+++ b/src/Data/Type/Equality/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Type.Equality.Compat"
 -- from a globally unique namespace.
 module Data.Type.Equality.Compat.Repl.Batteries (
diff --git a/src/Data/Typeable/Compat.hs b/src/Data/Typeable/Compat.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Typeable/Compat.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+module Data.Typeable.Compat (
+  module Base
+) where
+
+import "base-compat" Data.Typeable.Compat as Base
diff --git a/src/Data/Typeable/Compat/Repl/Batteries.hs b/src/Data/Typeable/Compat/Repl/Batteries.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Typeable/Compat/Repl/Batteries.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE PackageImports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
+-- | Reexports "Data.Typeable.Compat"
+-- from a globally unique namespace.
+module Data.Typeable.Compat.Repl.Batteries (
+  module Data.Typeable.Compat
+) where
+import "this" Data.Typeable.Compat
diff --git a/src/Data/Version/Compat/Repl/Batteries.hs b/src/Data/Version/Compat/Repl/Batteries.hs
--- a/src/Data/Version/Compat/Repl/Batteries.hs
+++ b/src/Data/Version/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Version.Compat"
 -- from a globally unique namespace.
 module Data.Version.Compat.Repl.Batteries (
diff --git a/src/Data/Void/Compat.hs b/src/Data/Void/Compat.hs
--- a/src/Data/Void/Compat.hs
+++ b/src/Data/Void/Compat.hs
@@ -1,12 +1,8 @@
-{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE NoImplicitPrelude, PackageImports #-}
 module Data.Void.Compat (
   Void
 , absurd
 , vacuous
 ) where
 
-#if MIN_VERSION_base(4,8,0)
 import "base-compat" Data.Void.Compat as Base
-#else
-import "void" Data.Void as Base
-#endif
diff --git a/src/Data/Void/Compat/Repl/Batteries.hs b/src/Data/Void/Compat/Repl/Batteries.hs
--- a/src/Data/Void/Compat/Repl/Batteries.hs
+++ b/src/Data/Void/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Void.Compat"
 -- from a globally unique namespace.
 module Data.Void.Compat.Repl.Batteries (
diff --git a/src/Data/Word/Compat/Repl/Batteries.hs b/src/Data/Word/Compat/Repl/Batteries.hs
--- a/src/Data/Word/Compat/Repl/Batteries.hs
+++ b/src/Data/Word/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Data.Word.Compat"
 -- from a globally unique namespace.
 module Data.Word.Compat.Repl.Batteries (
diff --git a/src/Debug/Trace/Compat/Repl/Batteries.hs b/src/Debug/Trace/Compat/Repl/Batteries.hs
--- a/src/Debug/Trace/Compat/Repl/Batteries.hs
+++ b/src/Debug/Trace/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Debug.Trace.Compat"
 -- from a globally unique namespace.
 module Debug.Trace.Compat.Repl.Batteries (
diff --git a/src/Foreign/Compat/Repl/Batteries.hs b/src/Foreign/Compat/Repl/Batteries.hs
--- a/src/Foreign/Compat/Repl/Batteries.hs
+++ b/src/Foreign/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Foreign.Compat"
 -- from a globally unique namespace.
 module Foreign.Compat.Repl.Batteries (
diff --git a/src/Foreign/ForeignPtr/Compat/Repl/Batteries.hs b/src/Foreign/ForeignPtr/Compat/Repl/Batteries.hs
--- a/src/Foreign/ForeignPtr/Compat/Repl/Batteries.hs
+++ b/src/Foreign/ForeignPtr/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Foreign.ForeignPtr.Compat"
 -- from a globally unique namespace.
 module Foreign.ForeignPtr.Compat.Repl.Batteries (
diff --git a/src/Foreign/ForeignPtr/Safe/Compat/Repl/Batteries.hs b/src/Foreign/ForeignPtr/Safe/Compat/Repl/Batteries.hs
--- a/src/Foreign/ForeignPtr/Safe/Compat/Repl/Batteries.hs
+++ b/src/Foreign/ForeignPtr/Safe/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Foreign.ForeignPtr.Safe.Compat"
 -- from a globally unique namespace.
 module Foreign.ForeignPtr.Safe.Compat.Repl.Batteries (
diff --git a/src/Foreign/ForeignPtr/Unsafe/Compat/Repl/Batteries.hs b/src/Foreign/ForeignPtr/Unsafe/Compat/Repl/Batteries.hs
--- a/src/Foreign/ForeignPtr/Unsafe/Compat/Repl/Batteries.hs
+++ b/src/Foreign/ForeignPtr/Unsafe/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Foreign.ForeignPtr.Unsafe.Compat"
 -- from a globally unique namespace.
 module Foreign.ForeignPtr.Unsafe.Compat.Repl.Batteries (
diff --git a/src/Foreign/Marshal/Alloc/Compat/Repl/Batteries.hs b/src/Foreign/Marshal/Alloc/Compat/Repl/Batteries.hs
--- a/src/Foreign/Marshal/Alloc/Compat/Repl/Batteries.hs
+++ b/src/Foreign/Marshal/Alloc/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Foreign.Marshal.Alloc.Compat"
 -- from a globally unique namespace.
 module Foreign.Marshal.Alloc.Compat.Repl.Batteries (
diff --git a/src/Foreign/Marshal/Array/Compat/Repl/Batteries.hs b/src/Foreign/Marshal/Array/Compat/Repl/Batteries.hs
--- a/src/Foreign/Marshal/Array/Compat/Repl/Batteries.hs
+++ b/src/Foreign/Marshal/Array/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Foreign.Marshal.Array.Compat"
 -- from a globally unique namespace.
 module Foreign.Marshal.Array.Compat.Repl.Batteries (
diff --git a/src/Foreign/Marshal/Compat/Repl/Batteries.hs b/src/Foreign/Marshal/Compat/Repl/Batteries.hs
--- a/src/Foreign/Marshal/Compat/Repl/Batteries.hs
+++ b/src/Foreign/Marshal/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Foreign.Marshal.Compat"
 -- from a globally unique namespace.
 module Foreign.Marshal.Compat.Repl.Batteries (
diff --git a/src/Foreign/Marshal/Safe/Compat/Repl/Batteries.hs b/src/Foreign/Marshal/Safe/Compat/Repl/Batteries.hs
--- a/src/Foreign/Marshal/Safe/Compat/Repl/Batteries.hs
+++ b/src/Foreign/Marshal/Safe/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Foreign.Marshal.Safe.Compat"
 -- from a globally unique namespace.
 module Foreign.Marshal.Safe.Compat.Repl.Batteries (
diff --git a/src/Foreign/Marshal/Unsafe/Compat/Repl/Batteries.hs b/src/Foreign/Marshal/Unsafe/Compat/Repl/Batteries.hs
--- a/src/Foreign/Marshal/Unsafe/Compat/Repl/Batteries.hs
+++ b/src/Foreign/Marshal/Unsafe/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Foreign.Marshal.Unsafe.Compat"
 -- from a globally unique namespace.
 module Foreign.Marshal.Unsafe.Compat.Repl.Batteries (
diff --git a/src/Foreign/Marshal/Utils/Compat/Repl/Batteries.hs b/src/Foreign/Marshal/Utils/Compat/Repl/Batteries.hs
--- a/src/Foreign/Marshal/Utils/Compat/Repl/Batteries.hs
+++ b/src/Foreign/Marshal/Utils/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Foreign.Marshal.Utils.Compat"
 -- from a globally unique namespace.
 module Foreign.Marshal.Utils.Compat.Repl.Batteries (
diff --git a/src/Numeric/Compat/Repl/Batteries.hs b/src/Numeric/Compat/Repl/Batteries.hs
--- a/src/Numeric/Compat/Repl/Batteries.hs
+++ b/src/Numeric/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Numeric.Compat"
 -- from a globally unique namespace.
 module Numeric.Compat.Repl.Batteries (
diff --git a/src/Numeric/Natural/Compat.hs b/src/Numeric/Natural/Compat.hs
--- a/src/Numeric/Natural/Compat.hs
+++ b/src/Numeric/Natural/Compat.hs
@@ -1,10 +1,8 @@
-{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE Trustworthy #-}
 module Numeric.Natural.Compat (
   module Base
+, minusNaturalMaybe
 ) where
 
-#if MIN_VERSION_base(4,8,0)
 import "base-compat" Numeric.Natural.Compat as Base
-#else
-import "nats" Numeric.Natural as Base
-#endif
diff --git a/src/Numeric/Natural/Compat/Repl/Batteries.hs b/src/Numeric/Natural/Compat/Repl/Batteries.hs
--- a/src/Numeric/Natural/Compat/Repl/Batteries.hs
+++ b/src/Numeric/Natural/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Numeric.Natural.Compat"
 -- from a globally unique namespace.
 module Numeric.Natural.Compat.Repl.Batteries (
diff --git a/src/Prelude/Compat.hs b/src/Prelude/Compat.hs
--- a/src/Prelude/Compat.hs
+++ b/src/Prelude/Compat.hs
@@ -1,18 +1,6 @@
-{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+{-# LANGUAGE NoImplicitPrelude, PackageImports #-}
 module Prelude.Compat (
   module Base
-#if !(MIN_VERSION_base(4,9,0))
-, Fail.MonadFail(Fail.fail)
-, Semi.Semigroup((Semi.<>))
-#endif
 ) where
 
 import "base-compat" Prelude.Compat as Base
-#if !(MIN_VERSION_base(4,9,0))
-  hiding (fail)
-#endif
-
-#if !(MIN_VERSION_base(4,9,0))
-import "fail"       Control.Monad.Fail as Fail
-import "semigroups" Data.Semigroup as Semi
-#endif
diff --git a/src/Prelude/Compat/Repl/Batteries.hs b/src/Prelude/Compat/Repl/Batteries.hs
--- a/src/Prelude/Compat/Repl/Batteries.hs
+++ b/src/Prelude/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Prelude.Compat"
 -- from a globally unique namespace.
 module Prelude.Compat.Repl.Batteries (
diff --git a/src/System/Environment/Compat/Repl/Batteries.hs b/src/System/Environment/Compat/Repl/Batteries.hs
--- a/src/System/Environment/Compat/Repl/Batteries.hs
+++ b/src/System/Environment/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "System.Environment.Compat"
 -- from a globally unique namespace.
 module System.Environment.Compat.Repl.Batteries (
diff --git a/src/System/Exit/Compat/Repl/Batteries.hs b/src/System/Exit/Compat/Repl/Batteries.hs
--- a/src/System/Exit/Compat/Repl/Batteries.hs
+++ b/src/System/Exit/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "System.Exit.Compat"
 -- from a globally unique namespace.
 module System.Exit.Compat.Repl.Batteries (
diff --git a/src/System/IO/Compat/Repl/Batteries.hs b/src/System/IO/Compat/Repl/Batteries.hs
--- a/src/System/IO/Compat/Repl/Batteries.hs
+++ b/src/System/IO/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "System.IO.Compat"
 -- from a globally unique namespace.
 module System.IO.Compat.Repl.Batteries (
diff --git a/src/System/IO/Error/Compat/Repl/Batteries.hs b/src/System/IO/Error/Compat/Repl/Batteries.hs
--- a/src/System/IO/Error/Compat/Repl/Batteries.hs
+++ b/src/System/IO/Error/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "System.IO.Error.Compat"
 -- from a globally unique namespace.
 module System.IO.Error.Compat.Repl.Batteries (
diff --git a/src/System/IO/Unsafe/Compat/Repl/Batteries.hs b/src/System/IO/Unsafe/Compat/Repl/Batteries.hs
--- a/src/System/IO/Unsafe/Compat/Repl/Batteries.hs
+++ b/src/System/IO/Unsafe/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "System.IO.Unsafe.Compat"
 -- from a globally unique namespace.
 module System.IO.Unsafe.Compat.Repl.Batteries (
diff --git a/src/Text/Read/Compat/Repl/Batteries.hs b/src/Text/Read/Compat/Repl/Batteries.hs
--- a/src/Text/Read/Compat/Repl/Batteries.hs
+++ b/src/Text/Read/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Text.Read.Compat"
 -- from a globally unique namespace.
 module Text.Read.Compat.Repl.Batteries (
diff --git a/src/Text/Read/Lex/Compat.hs b/src/Text/Read/Lex/Compat.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Read/Lex/Compat.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+module Text.Read.Lex.Compat (
+  module Base
+) where
+
+import "base-compat" Text.Read.Lex.Compat as Base
diff --git a/src/Text/Read/Lex/Compat/Repl/Batteries.hs b/src/Text/Read/Lex/Compat/Repl/Batteries.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Read/Lex/Compat/Repl/Batteries.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE PackageImports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
+-- | Reexports "Text.Read.Lex.Compat"
+-- from a globally unique namespace.
+module Text.Read.Lex.Compat.Repl.Batteries (
+  module Text.Read.Lex.Compat
+) where
+import "this" Text.Read.Lex.Compat
diff --git a/src/Type/Reflection/Compat/Repl/Batteries.hs b/src/Type/Reflection/Compat/Repl/Batteries.hs
--- a/src/Type/Reflection/Compat/Repl/Batteries.hs
+++ b/src/Type/Reflection/Compat/Repl/Batteries.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE PackageImports #-}
-{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -Wno-dodgy-exports -Wno-unused-imports #-}
 -- | Reexports "Type.Reflection.Compat"
 -- from a globally unique namespace.
 module Type.Reflection.Compat.Repl.Batteries (
diff --git a/test/Data/Bits/CompatSpec.hs b/test/Data/Bits/CompatSpec.hs
--- a/test/Data/Bits/CompatSpec.hs
+++ b/test/Data/Bits/CompatSpec.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP #-}
 module Data.Bits.CompatSpec (main, spec) where
 
 import Test.Hspec
@@ -26,9 +25,7 @@
       popCountDefault (0  :: Int) `shouldBe` 0
       popCountDefault (1  :: Int) `shouldBe` 1
       popCountDefault (10 :: Int) `shouldBe` 2
-#if MIN_VERSION_base(4,7,0)
   describe "toIntegralSized" $
     it "converts an Integral type to another as measured by bitSizeMaybe" $ do
       toIntegralSized (42 :: Integer)                   `shouldBe` (Just 42 :: Maybe Int)
       toIntegralSized (12345678901234567890 :: Integer) `shouldBe` (Nothing :: Maybe Int)
-#endif
diff --git a/test/Numeric/CompatSpec.hs b/test/Numeric/CompatSpec.hs
--- a/test/Numeric/CompatSpec.hs
+++ b/test/Numeric/CompatSpec.hs
@@ -22,3 +22,24 @@
       showGFloatAlt Nothing  (1234567890 :: Double) "" `shouldBe` "1.23456789e9"
     it "shows a RealFloat value, using scientific notation and specifying the number of decimal places" $
       showGFloatAlt (Just 4) (1234567890 :: Double) "" `shouldBe` "1.2346e9"
+  describe "readBin" $ do
+    it "parses an entirely binary Integer" $
+      readBinInteger "00000111" `shouldBe` [(7, "")]
+    it "does not parse a non-binary Integer" $
+      readBinInteger "-24" `shouldBe` []
+    it "parses the binary prefix of an Integer" $
+      readBinInteger "1011784372843778438743" `shouldBe` [(11,"784372843778438743")]
+  describe "showBin" $ do
+    it "shows small Ints in base 2" $
+      map (\ x -> showBinInt x "") [1..32] `shouldBe`
+        [ "1","10","11","100","101","110","111","1000","1001","1010","1011","1100","1101","1110","1111"
+        , "10000","10001","10010","10011","10100","10101","10110","10111","11000"
+        , "11001","11010","11011","11100","11101","11110","11111","100000" ]
+    it "shows a large Int in base 2" $
+      showBinInt 241324784 "" `shouldBe` "1110011000100101001011110000"
+  where
+    readBinInteger :: ReadS Integer
+    readBinInteger = readBin
+
+    showBinInt :: Int -> ShowS
+    showBinInt = showBin
diff --git a/test/SafeHaskellSpec.hs b/test/SafeHaskellSpec.hs
--- a/test/SafeHaskellSpec.hs
+++ b/test/SafeHaskellSpec.hs
@@ -1,7 +1,5 @@
-{-# LANGUAGE CPP, NoImplicitPrelude #-}
-#if __GLASGOW_HASKELL__ >= 704
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# LANGUAGE Safe #-}
-#endif
 module SafeHaskellSpec (main, spec) where
 
 import TestHspecTrustworthy
@@ -14,6 +12,7 @@
 import Control.Monad.Fail.Compat ()
 import Control.Monad.IO.Class.Compat ()
 import Data.Bifoldable.Compat ()
+import Data.Bifoldable1.Compat ()
 import Data.Bifunctor.Compat ()
 import Data.Bitraversable.Compat ()
 import Data.Bits.Compat ()
@@ -21,6 +20,7 @@
 import Data.Complex.Compat ()
 import Data.Either.Compat ()
 import Data.Foldable.Compat ()
+import Data.Foldable1.Compat ()
 import Data.Function.Compat ()
 import Data.Functor.Compat ()
 import Data.Functor.Compose.Compat ()
@@ -38,6 +38,9 @@
 import Data.Semigroup.Compat ()
 import Data.STRef.Compat ()
 import Data.String.Compat ()
+import Data.Traversable.Compat ()
+import Data.Tuple.Compat ()
+import Data.Typeable.Compat ()
 import Data.Type.Coercion.Compat ()
 import Data.Type.Equality.Compat ()
 import Data.Version.Compat ()
@@ -59,6 +62,7 @@
 import System.IO.Compat ()
 import System.IO.Error.Compat ()
 import Text.Read.Compat ()
+import Text.Read.Lex.Compat ()
 import Type.Reflection.Compat ()
 
 main :: IO ()
diff --git a/test/System/Environment/CompatSpec.hs b/test/System/Environment/CompatSpec.hs
--- a/test/System/Environment/CompatSpec.hs
+++ b/test/System/Environment/CompatSpec.hs
@@ -1,10 +1,7 @@
-{-# LANGUAGE CPP #-}
 module System.Environment.CompatSpec (main, spec) where
 
 import           Test.Hspec
-#if __GLASGOW_HASKELL__ >= 702
 import           Test.QuickCheck
-#endif
 
 import qualified Control.Exception as E
 import           GHC.IO.Exception (IOErrorType (InvalidArgument))
@@ -56,13 +53,11 @@
     it "throws an exception if key contains '='" $ do
       unsetEnv "some=key" `shouldThrow` (== InvalidArgument) . ioeGetErrorType
 
-#if __GLASGOW_HASKELL__ >= 702
     it "works for arbitrary keys" $
       property $ \k -> ('\NUL' `notElem` k && '=' `notElem` k && (not . null) k) ==> do
         setEnv k "foo"
         unsetEnv k
         getEnv k `shouldThrow` isDoesNotExistError
-#endif
 
   describe "setEnv" $ do
     it "sets specified environment variable to given value" $ do
@@ -96,7 +91,6 @@
       setEnv "FOO\NULBAR" "foo"
       getEnv "FOO" `shouldReturn` "foo"
 
-#if __GLASGOW_HASKELL__ >= 702
     it "works for unicode" $ do
       unsetEnv "FOO"
       setEnv "FOO" "foo-\955-bar"
@@ -106,7 +100,6 @@
       property $ \v -> ('\NUL' `notElem` v && (not . null) v) ==> do
         setEnv "FOO" v
         getEnv "FOO" `shouldReturn` v
-#endif
 
     it "works for unicode keys" $ do
       setEnv "foo-\955-bar" "foo"
@@ -118,9 +111,7 @@
     it "throws an exception if key contains '='" $ do
       setEnv "some=key" "foo" `shouldThrow` (== InvalidArgument) . ioeGetErrorType
 
-#if __GLASGOW_HASKELL__ >= 702
     it "works for arbitrary keys" $
       property $ \k -> ('\NUL' `notElem` k && '=' `notElem` k && (not . null) k) ==> do
         setEnv k "foo"
         getEnv k `shouldReturn` "foo"
-#endif
diff --git a/test/TestHspecTrustworthy.hs b/test/TestHspecTrustworthy.hs
--- a/test/TestHspecTrustworthy.hs
+++ b/test/TestHspecTrustworthy.hs
@@ -1,7 +1,4 @@
-{-# LANGUAGE CPP #-}
-#if __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE Trustworthy #-}
-#endif
 -- | Reexports "Test.Hspec" from a @Trustworthy@ module.
 module TestHspecTrustworthy (module Test.Hspec) where
 
