diff --git a/CHANGES.markdown b/CHANGES.markdown
--- a/CHANGES.markdown
+++ b/CHANGES.markdown
@@ -1,7 +1,15 @@
+## Changes in 0.12.0 [2021.08.29]
+ - Sync with `base-4.16`/GHC 9.2
+ - `Data.Semigroup.Compat{.Repl}` no longer re-exports the `Option` data type
+   or the `option` function, as both have been removed in `base-4.16`.
+ - Backport `readBin` and `showBin` to `Numeric.Compat`
+ - Backport `readBinP` to `Text.Read.Lex.Compat`
+
 ## Changes in 0.11.2 [2020.09.30]
  - Sync with `base-4.15`/GHC 9.0
- - Backport `singleton` to `Data.List` and `Data.List.NonEmpty`
- - Backport `hGetContents'`, `getContents'`, and `readFile'` added to `System.IO`
+ - Backport `singleton` to `Data.List.Compat` and `Data.List.NonEmpty.Compat`
+ - Backport `hGetContents'`, `getContents'`, and `readFile'` added to
+   `System.IO.Compat`
 
 ## Changes in 0.11.1 [2020.01.27]
  - Sync with `base-4.14`/GHC 8.10
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -145,7 +145,7 @@
  * `callocArray` and `callocArray0` functions to `Foreign.Marshal.Array.Compat`
  * `fillBytes` to `Foreign.Marshal.Utils.Compat`
  * Added `Data.List.Compat.scanl'`
- * `showFFloatAlt` and `showGFloatAlt` to `Numeric.Compat`
+ * `showFFloatAlt`, `showGFloatAlt`, `readBin`, and `showBin` to `Numeric.Compat`
  * `lookupEnv`, `setEnv` and `unsetEnv` to `System.Environment.Compat`
  * `unsafeFixIO` and `unsafeDupablePerformIO` to `System.IO.Unsafe.IO`
  * `RuntimeRep`-polymorphic `($!)` to `Prelude.Compat`
@@ -153,7 +153,8 @@
  * `isResourceVanishedError`, `resourceVanishedErrorType`, and
    `isResourceVanishedErrorType` to `System.IO.Error.Compat`
  * `singleton` to `Data.List.Compat` and `Data.List.NonEmpty.Compat`
- * `hGetContents'`, `getContents'`, and `readFile'` to `System.IO`
+ * `hGetContents'`, `getContents'`, and `readFile'` to `System.IO.Compat`
+ * `readBinP` to `Text.Read.Lex.Compat`
 
 ## What is not covered
 
@@ -306,6 +307,7 @@
 
 ## Supported versions of GHC/`base`
 
+ * `ghc-9.2.*`  / `base-4.16.*`
  * `ghc-9.0.*`  / `base-4.15.*`
  * `ghc-8.10.*` / `base-4.14.*`
  * `ghc-8.8.*`  / `base-4.13.*`
diff --git a/base-compat.cabal b/base-compat.cabal
--- a/base-compat.cabal
+++ b/base-compat.cabal
@@ -1,5 +1,5 @@
 name:             base-compat
-version:          0.11.2
+version:          0.12.0
 license:          MIT
 license-file:     LICENSE
 copyright:        (c) 2012-2018 Simon Hengel,
@@ -43,18 +43,6 @@
                   module with the suffix @.Repl@, which are distinct from
                   anything in @base-compat-batteries@, to allow for easier
                   use in GHCi.
-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
-                  , 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
 
 source-repository head
@@ -138,6 +126,7 @@
       System.IO.Error.Compat
       System.IO.Unsafe.Compat
       Text.Read.Compat
+      Text.Read.Lex.Compat
       Type.Reflection.Compat
 
       Control.Concurrent.Compat.Repl
@@ -198,4 +187,5 @@
       System.IO.Error.Compat.Repl
       System.IO.Unsafe.Compat.Repl
       Text.Read.Compat.Repl
+      Text.Read.Lex.Compat.Repl
       Type.Reflection.Compat.Repl
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
@@ -21,9 +21,6 @@
   , Any(..)
   , Sum(..)
   , Product(..)
-  -- * A better monoid for Maybe
-  , Option(..)
-  , option
   -- * Difference lists of a semigroup
   , diff
   , cycle1
diff --git a/src/Numeric/Compat.hs b/src/Numeric/Compat.hs
--- a/src/Numeric/Compat.hs
+++ b/src/Numeric/Compat.hs
@@ -1,20 +1,24 @@
 {-# LANGUAGE CPP, NoImplicitPrelude #-}
 module Numeric.Compat (
   module Base
+, showBin
 , showFFloatAlt
 , showGFloatAlt
 , showHFloat
+, readBin
 ) where
 
 import Numeric as Base
 
 #if !(MIN_VERSION_base(4,7,0))
-import Data.Char (intToDigit)
 import GHC.Float
 #endif
 
-#if !(MIN_VERSION_base(4,11,0))
+#if !(MIN_VERSION_base(4,16,0))
+import Data.Char (intToDigit)
 import Prelude
+import Text.ParserCombinators.ReadP (readP_to_S)
+import qualified Text.Read.Lex.Compat as L
 #endif
 
 #if !(MIN_VERSION_base(4,7,0))
@@ -150,4 +154,17 @@
   allZ xs = case xs of
               x : more -> x == 0 && allZ more
               []       -> True
+#endif
+
+#if !(MIN_VERSION_base(4,16,0))
+-- | Read an unsigned number in binary notation.
+--
+-- >>> readBin "10011"
+-- [(19,"")]
+readBin :: (Eq a, Num a) => ReadS a
+readBin = readP_to_S L.readBinP
+
+-- | Show /non-negative/ 'Integral' numbers in base 2.
+showBin :: (Integral a, Show a) => a -> ShowS
+showBin = showIntAtBase 2  intToDigit
 #endif
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,34 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+#if __GLASGOW_HASKELL__ >= 702
+{-# LANGUAGE Trustworthy #-}
+#endif
+module Text.Read.Lex.Compat (
+  module Base
+, readBinP
+) where
+
+import Text.Read.Lex as Base
+
+#if !(MIN_VERSION_base(4,16,0))
+import Data.Char (ord)
+import Prelude
+import Text.ParserCombinators.ReadP (ReadP)
+#endif
+
+#if !(MIN_VERSION_base(4,16,0))
+readBinP :: (Eq a, Num a) => ReadP a
+readBinP = readIntP'2
+{-# SPECIALISE readBinP :: ReadP Integer #-}
+
+readIntP'2 :: (Eq a, Num a) => ReadP a
+readIntP'2 = readIntP 2 isDigit valDigit
+ where
+  isDigit  c = maybe False (const True) (valDig2 c)
+  valDigit c = maybe 0     id           (valDig2 c)
+{-# SPECIALISE readIntP'2 :: ReadP Integer #-}
+
+valDig2 :: Char -> Maybe Int
+valDig2 c
+  | '0' <= c && c <= '1' = Just (ord c - ord '0')
+  | otherwise            = Nothing
+#endif
diff --git a/src/Text/Read/Lex/Compat/Repl.hs b/src/Text/Read/Lex/Compat/Repl.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Read/Lex/Compat/Repl.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE PackageImports #-}
+{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+-- | Reexports "Text.Read.Lex.Compat"
+-- from a globally unique namespace.
+module Text.Read.Lex.Compat.Repl (
+  module Text.Read.Lex.Compat
+) where
+import "this" Text.Read.Lex.Compat
