diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+### 3.8.3 [2019.11.06]
+* Use `base-compat-batteries-0.11.0` to define instances for `(:~:)` back to
+  `base-4.5` and instances for `(:~~:)` back to `base-4.9`.
+
 ### 3.8.2 [2019.05.02]
 * Make the `TextShow` instances for `UArray` and `Fixed` use the correct
   precedence on `base-4.13` or later.
diff --git a/benchmarks/Bench.hs b/benchmarks/Bench.hs
--- a/benchmarks/Bench.hs
+++ b/benchmarks/Bench.hs
@@ -27,6 +27,59 @@
 import           TextShow.Generic (genericShowbPrec, genericShowtPrec, genericShowtlPrec)
 import           TextShow.TH (deriveTextShow)
 
+-------------------------------------------------------------------------------
+-- Tree-like ADTs
+-------------------------------------------------------------------------------
+
+-- NB: constructors must be same length!
+data BinTree1 a = BTEmpty1
+                | BTLeaf1 a
+                | BTBranch1 (BinTree1 a) (BinTree1 a)
+  deriving Show
+
+data BinTree2 a = BTEmpty2
+                | BTLeaf2 a
+                | BTBranch2 (BinTree2 a) (BinTree2 a)
+
+data BinTree3 a = BTEmpty3
+                | BTLeaf3 a
+                | BTBranch3 (BinTree3 a) (BinTree3 a)
+  deriving Generic
+
+instance TextShow a => TextShow (BinTree3 a) where
+    showbPrec = genericShowbPrec
+
+-------------------------------------------------------------------------------
+-- Simple enumeration types
+-------------------------------------------------------------------------------
+
+data Color = Red | Green | Blue | Orange | Violet
+  deriving (Generic, Show)
+
+newtype Color2 = Color2 Color
+
+instance TextShow Color2 where
+    showbPrec  p (Color2 c) = genericShowbPrec  p c
+    showtPrec  p (Color2 c) = genericShowtPrec  p c
+    showtlPrec p (Color2 c) = genericShowtlPrec p c
+
+colorShowt :: Color -> T.Text
+colorShowt c = case c of
+  Red    -> T.pack "Red"
+  Green  -> T.pack "Green"
+  Blue   -> T.pack "Blue"
+  Orange -> T.pack "Orange"
+  Violet -> T.pack "Violet"
+
+-------------------------------------------------------------------------------
+
+$(deriveTextShow ''BinTree2)
+$(deriveTextShow ''Color)
+
+-------------------------------------------------------------------------------
+-- Benchmarks
+-------------------------------------------------------------------------------
+
 main :: IO ()
 main = defaultMain
     [ sampleGroup "String Show"                 BTLeaf1 BTBranch1 BTEmpty1 show
@@ -42,10 +95,6 @@
       ]
     ]
 
--------------------------------------------------------------------------------
--- Tree-like ADTs
--------------------------------------------------------------------------------
-
 sampleGroup :: forall a b. NFData b
             => String -> (Int -> a) -> (a -> a -> a) -> a -> (a -> b) -> Benchmark
 sampleGroup title leaf branch empty showFun =
@@ -85,48 +134,3 @@
     (leaf 12345 `branch` leaf 1234) `branch`
     leaf 123456 `branch`
     (leaf 1234567 `branch` leaf 123456)
-
--- NB: constructors must be same length!
-data BinTree1 a = BTEmpty1
-                | BTLeaf1 a
-                | BTBranch1 (BinTree1 a) (BinTree1 a)
-  deriving Show
-
-data BinTree2 a = BTEmpty2
-                | BTLeaf2 a
-                | BTBranch2 (BinTree2 a) (BinTree2 a)
-
-data BinTree3 a = BTEmpty3
-                | BTLeaf3 a
-                | BTBranch3 (BinTree3 a) (BinTree3 a)
-  deriving Generic
-
-instance TextShow a => TextShow (BinTree3 a) where
-    showbPrec = genericShowbPrec
-
--------------------------------------------------------------------------------
--- Simple enumeration types
--------------------------------------------------------------------------------
-
-data Color = Red | Green | Blue | Orange | Violet
-  deriving (Generic, Show)
-
-newtype Color2 = Color2 Color
-
-instance TextShow Color2 where
-    showbPrec  p (Color2 c) = genericShowbPrec  p c
-    showtPrec  p (Color2 c) = genericShowtPrec  p c
-    showtlPrec p (Color2 c) = genericShowtlPrec p c
-
-colorShowt :: Color -> T.Text
-colorShowt c = case c of
-  Red    -> T.pack "Red"
-  Green  -> T.pack "Green"
-  Blue   -> T.pack "Blue"
-  Orange -> T.pack "Orange"
-  Violet -> T.pack "Violet"
-
--------------------------------------------------------------------------------
-
-$(deriveTextShow ''BinTree2)
-$(deriveTextShow ''Color)
diff --git a/src/TextShow/Control/Concurrent.hs b/src/TextShow/Control/Concurrent.hs
--- a/src/TextShow/Control/Concurrent.hs
+++ b/src/TextShow/Control/Concurrent.hs
@@ -44,6 +44,6 @@
 getThreadId (ThreadId tid) = getThreadId# (unsafeCoerce# tid)
 
 -- | /Since: 2/
-$(deriveTextShow ''ThreadStatus)
--- | /Since: 2/
 $(deriveTextShow ''BlockReason)
+-- | /Since: 2/
+$(deriveTextShow ''ThreadStatus)
diff --git a/src/TextShow/Data/Char.hs b/src/TextShow/Data/Char.hs
--- a/src/TextShow/Data/Char.hs
+++ b/src/TextShow/Data/Char.hs
@@ -33,6 +33,17 @@
 import           TextShow.Data.Integral ()
 import           TextShow.TH.Internal (deriveTextShow)
 
+-- | /Since: 2/
+$(deriveTextShow ''GeneralCategory)
+
+-- | /Since: 2/
+instance TextShow Char where
+    showb = showbChar
+    {-# INLINE showb #-}
+
+    showbList = showbString
+    {-# INLINE showbList #-}
+
 -- | A table of ASCII control characters that needs to be escaped with a backslash.
 --
 -- /Since: 2/
@@ -94,14 +105,3 @@
 showbGeneralCategory :: GeneralCategory -> Builder
 showbGeneralCategory = showb
 {-# INLINE showbGeneralCategory #-}
-
--- | /Since: 2/
-instance TextShow Char where
-    showb = showbChar
-    {-# INLINE showb #-}
-
-    showbList = showbString
-    {-# INLINE showbList #-}
-
--- | /Since: 2/
-$(deriveTextShow ''GeneralCategory)
diff --git a/src/TextShow/Data/Data.hs b/src/TextShow/Data/Data.hs
--- a/src/TextShow/Data/Data.hs
+++ b/src/TextShow/Data/Data.hs
@@ -23,15 +23,15 @@
 import TextShow.TH.Internal (deriveTextShow)
 
 -- | /Since: 2/
-$(deriveTextShow ''DataType)
+instance TextShow Constr where
+    showb = fromString . showConstr
+    {-# INLINE showb #-}
+
 -- | /Since: 2/
 $(deriveTextShow ''DataRep)
 -- | /Since: 2/
+$(deriveTextShow ''DataType)
+-- | /Since: 2/
 $(deriveTextShow ''ConstrRep)
 -- | /Since: 2/
 $(deriveTextShow ''Fixity)
-
--- | /Since: 2/
-instance TextShow Constr where
-    showb = fromString . showConstr
-    {-# INLINE showb #-}
diff --git a/src/TextShow/Data/Fixed.hs b/src/TextShow/Data/Fixed.hs
--- a/src/TextShow/Data/Fixed.hs
+++ b/src/TextShow/Data/Fixed.hs
@@ -25,7 +25,7 @@
 #if MIN_VERSION_base(4,7,0)
 import Data.Fixed (Fixed(..))
 import Data.Int (Int64)
-import Data.Semigroup (mtimesDefault)
+import Data.Semigroup.Compat (mtimesDefault)
 import Data.Text.Lazy.Builder (singleton)
 
 import TextShow.Data.Integral ()
diff --git a/src/TextShow/Data/Floating.hs b/src/TextShow/Data/Floating.hs
--- a/src/TextShow/Data/Floating.hs
+++ b/src/TextShow/Data/Floating.hs
@@ -41,6 +41,27 @@
 import           TextShow.TH.Internal (deriveTextShow)
 import           TextShow.Utils (i2d)
 
+-------------------------------------------------------------------------------
+-- TextShow instances
+-------------------------------------------------------------------------------
+
+-- | /Since: 2/
+$(deriveTextShow ''FPFormat)
+
+-- | /Since: 2/
+instance TextShow Float where
+    showbPrec = showbRealFloatPrec
+    {-# INLINE showbPrec #-}
+
+-- | /Since: 2/
+instance TextShow Double where
+    showbPrec = showbRealFloatPrec
+    {-# INLINE showbPrec #-}
+
+-------------------------------------------------------------------------------
+-- Standalone showb* functions
+-------------------------------------------------------------------------------
+
 -- | Convert a 'RealFloat' value to a 'Builder' with the given precedence.
 --
 -- /Since: 2/
@@ -398,20 +419,3 @@
 -- | Cached powers of 10.
 expts10 :: Array Int Integer
 expts10 = array (minExpt,maxExpt10) [(n,10^n) | n <- [minExpt .. maxExpt10]]
-
--------------------------------------------------------------------------------
--- TextShow instances
--------------------------------------------------------------------------------
-
--- | /Since: 2/
-instance TextShow Float where
-    showbPrec = showbRealFloatPrec
-    {-# INLINE showbPrec #-}
-
--- | /Since: 2/
-instance TextShow Double where
-    showbPrec = showbRealFloatPrec
-    {-# INLINE showbPrec #-}
-
--- | /Since: 2/
-$(deriveTextShow ''FPFormat)
diff --git a/src/TextShow/Data/Functor/Product.hs b/src/TextShow/Data/Functor/Product.hs
--- a/src/TextShow/Data/Functor/Product.hs
+++ b/src/TextShow/Data/Functor/Product.hs
@@ -22,9 +22,9 @@
 import TextShow.TH.Internal (deriveTextShow1)
 
 -- | /Since: 3/
+$(deriveTextShow1 ''Product)
+
+-- | /Since: 3/
 instance (TextShow1 f, TextShow1 g, TextShow a) => TextShow (Product f g a) where
     showbPrec = showbPrec1
     {-# INLINE showbPrec #-}
-
--- | /Since: 3/
-$(deriveTextShow1 ''Product)
diff --git a/src/TextShow/Data/Functor/Sum.hs b/src/TextShow/Data/Functor/Sum.hs
--- a/src/TextShow/Data/Functor/Sum.hs
+++ b/src/TextShow/Data/Functor/Sum.hs
@@ -22,9 +22,9 @@
 import TextShow.TH.Internal (deriveTextShow1)
 
 -- | /Since: 3/
+$(deriveTextShow1 ''Sum)
+
+-- | /Since: 3/
 instance (TextShow1 f, TextShow1 g, TextShow a) => TextShow (Sum f g a) where
     showbPrec = showbPrec1
     {-# INLINE showbPrec #-}
-
--- | /Since: 3/
-$(deriveTextShow1 ''Sum)
diff --git a/src/TextShow/Data/List/NonEmpty.hs b/src/TextShow/Data/List/NonEmpty.hs
--- a/src/TextShow/Data/List/NonEmpty.hs
+++ b/src/TextShow/Data/List/NonEmpty.hs
@@ -15,7 +15,7 @@
 -}
 module TextShow.Data.List.NonEmpty () where
 
-import Data.List.NonEmpty (NonEmpty)
+import Data.List.NonEmpty.Compat (NonEmpty)
 
 import TextShow.Data.List ()
 import TextShow.TH.Internal (deriveTextShow, deriveTextShow1)
diff --git a/src/TextShow/Data/Proxy.hs b/src/TextShow/Data/Proxy.hs
--- a/src/TextShow/Data/Proxy.hs
+++ b/src/TextShow/Data/Proxy.hs
@@ -22,7 +22,7 @@
 -}
 module TextShow.Data.Proxy () where
 
-import Data.Proxy (Proxy)
+import Data.Proxy.Compat (Proxy)
 
 import TextShow.Classes (TextShow(..))
 import TextShow.TH.Internal (deriveTextShow1, makeShowbPrec,
diff --git a/src/TextShow/Data/Semigroup.hs b/src/TextShow/Data/Semigroup.hs
--- a/src/TextShow/Data/Semigroup.hs
+++ b/src/TextShow/Data/Semigroup.hs
@@ -15,7 +15,7 @@
 -}
 module TextShow.Data.Semigroup () where
 
-import Data.Semigroup (Min, Max, First, Last, WrappedMonoid, Option, Arg)
+import Data.Semigroup.Compat (Min, Max, First, Last, WrappedMonoid, Option, Arg)
 
 import TextShow.Data.Maybe ()
 import TextShow.TH.Internal (deriveTextShow, deriveTextShow1, deriveTextShow2)
diff --git a/src/TextShow/Data/Type/Equality.hs b/src/TextShow/Data/Type/Equality.hs
--- a/src/TextShow/Data/Type/Equality.hs
+++ b/src/TextShow/Data/Type/Equality.hs
@@ -1,12 +1,13 @@
 {-# LANGUAGE CPP             #-}
-
-#if MIN_VERSION_base(4,7,0)
 {-# LANGUAGE GADTs           #-}
-{-# LANGUAGE PolyKinds       #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE TypeOperators   #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+
+#if __GLASGOW_HASKELL__ >= 706
+{-# LANGUAGE PolyKinds       #-}
 #endif
+
+{-# OPTIONS_GHC -fno-warn-orphans #-}
 {-|
 Module:      TextShow.Data.Type.Equality
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -22,11 +23,7 @@
 -}
 module TextShow.Data.Type.Equality () where
 
-#if MIN_VERSION_base(4,7,0)
-import Data.Type.Equality ((:~:))
-# if MIN_VERSION_base(4,10,0)
-import Data.Type.Equality ((:~~:))
-# endif
+import Data.Type.Equality.Compat
 
 import TextShow.Classes (TextShow1(..))
 import TextShow.TH.Internal (deriveTextShow, deriveTextShow2, makeLiftShowbPrec)
@@ -41,7 +38,7 @@
 -- | /Since: 2/
 $(deriveTextShow2 ''(:~:))
 
-# if MIN_VERSION_base(4,10,0)
+#if MIN_VERSION_base(4,9,0)
 -- | /Since: 3.6/
 $(deriveTextShow ''(:~~:))
 
@@ -51,5 +48,4 @@
 
 -- | /Since: 3.6/
 $(deriveTextShow2 ''(:~~:))
-# endif
 #endif
diff --git a/src/TextShow/Data/Void.hs b/src/TextShow/Data/Void.hs
--- a/src/TextShow/Data/Void.hs
+++ b/src/TextShow/Data/Void.hs
@@ -13,7 +13,7 @@
 -}
 module TextShow.Data.Void () where
 
-import Data.Void (Void, absurd)
+import Data.Void.Compat (Void, absurd)
 import Prelude ()
 import TextShow.Classes (TextShow(..))
 
diff --git a/src/TextShow/Foreign/Ptr.hs b/src/TextShow/Foreign/Ptr.hs
--- a/src/TextShow/Foreign/Ptr.hs
+++ b/src/TextShow/Foreign/Ptr.hs
@@ -16,7 +16,7 @@
 -}
 module TextShow.Foreign.Ptr () where
 
-import Data.Semigroup (mtimesDefault)
+import Data.Semigroup.Compat (mtimesDefault)
 import Data.Text.Lazy.Builder (Builder, singleton)
 
 import Foreign.ForeignPtr (ForeignPtr)
diff --git a/src/TextShow/GHC/Fingerprint.hs b/src/TextShow/GHC/Fingerprint.hs
--- a/src/TextShow/GHC/Fingerprint.hs
+++ b/src/TextShow/GHC/Fingerprint.hs
@@ -14,7 +14,7 @@
 -}
 module TextShow.GHC.Fingerprint () where
 
-import Data.Semigroup (mtimesDefault)
+import Data.Semigroup.Compat (mtimesDefault)
 import Data.Text.Lazy.Builder (Builder, singleton)
 import Data.Word (Word64)
 
diff --git a/src/TextShow/GHC/Generics.hs b/src/TextShow/GHC/Generics.hs
--- a/src/TextShow/GHC/Generics.hs
+++ b/src/TextShow/GHC/Generics.hs
@@ -33,10 +33,10 @@
                              makeLiftShowbPrec, makeLiftShowbPrec2)
 
 -- | /Since: 2/
+$(deriveTextShow1 ''U1)
+-- | /Since: 2/
 instance TextShow (U1 p) where
     showbPrec = liftShowbPrec undefined undefined
--- | /Since: 2/
-$(deriveTextShow1 ''U1)
 
 -- | /Since: 2/
 $(deriveTextShow  ''Par1)
@@ -115,9 +115,9 @@
 $(deriveTextShow1 'UWord)
 
 -- | /Since: 2/
-$(deriveTextShow ''Fixity)
--- | /Since: 2/
 $(deriveTextShow ''Associativity)
+-- | /Since: 2/
+$(deriveTextShow ''Fixity)
 #if MIN_VERSION_base(4,9,0)
 -- | Only available with @base-4.9.0.0@ or later.
 --
diff --git a/src/TextShow/GHC/RTS/Flags.hs b/src/TextShow/GHC/RTS/Flags.hs
--- a/src/TextShow/GHC/RTS/Flags.hs
+++ b/src/TextShow/GHC/RTS/Flags.hs
@@ -32,8 +32,15 @@
 import TextShow.TH.Names (giveGCStatsTypeName, doCostCentresTypeName,
                           doHeapProfileTypeName, doTraceTypeName)
 
--- | /Since: 2/
-$(deriveTextShow ''RTSFlags)
+-- | /Since: 2.1/
+$(deriveTextShow giveGCStatsTypeName)
+-- | /Since: 2.1/
+$(deriveTextShow doCostCentresTypeName)
+-- | /Since: 2.1/
+$(deriveTextShow doHeapProfileTypeName)
+-- | /Since: 2.1/
+$(deriveTextShow doTraceTypeName)
+
 -- | /Since: 2/
 $(deriveTextShow ''GCFlags)
 -- | /Since: 2/
@@ -56,13 +63,6 @@
 -- /Since: 3.3/
 $(deriveTextShow ''ParFlags)
 # endif
-
--- | /Since: 2.1/
-$(deriveTextShow giveGCStatsTypeName)
--- | /Since: 2.1/
-$(deriveTextShow doCostCentresTypeName)
--- | /Since: 2.1/
-$(deriveTextShow doHeapProfileTypeName)
--- | /Since: 2.1/
-$(deriveTextShow doTraceTypeName)
+-- | /Since: 2/
+$(deriveTextShow ''RTSFlags)
 #endif
diff --git a/src/TextShow/GHC/Stack.hs b/src/TextShow/GHC/Stack.hs
--- a/src/TextShow/GHC/Stack.hs
+++ b/src/TextShow/GHC/Stack.hs
@@ -34,6 +34,9 @@
 import TextShow.Data.Tuple    ()
 import TextShow.TH.Internal (deriveTextShow)
 
+-- | /Since: 3.0.1/
+$(deriveTextShow ''SrcLoc)
+
 # if MIN_VERSION_base(4,9,0)
 -- | /Since: 3.0.1/
 instance TextShow CallStack where
@@ -43,7 +46,4 @@
 -- | /Since: 3.0.1/
 $(deriveTextShow ''CallStack)
 # endif
-
--- | /Since: 3.0.1/
-$(deriveTextShow ''SrcLoc)
 #endif
diff --git a/src/TextShow/Generic.hs b/src/TextShow/Generic.hs
--- a/src/TextShow/Generic.hs
+++ b/src/TextShow/Generic.hs
@@ -96,7 +96,7 @@
     ) where
 
 import           Data.Data (Data, Typeable)
-import           Data.Functor.Contravariant (Contravariant(..))
+import           Data.Functor.Contravariant.Compat (Contravariant(..))
 import qualified Data.Text    as TS (Text, pack, singleton)
 import qualified Data.Text.IO as TS (putStrLn, hPutStrLn)
 import qualified Data.Text.Lazy    as TL (Text, pack, singleton)
diff --git a/src/TextShow/Numeric/Natural.hs b/src/TextShow/Numeric/Natural.hs
--- a/src/TextShow/Numeric/Natural.hs
+++ b/src/TextShow/Numeric/Natural.hs
@@ -22,7 +22,7 @@
 import GHC.Natural (Natural(..))
 import GHC.Types (Word(..))
 #else
-import Numeric.Natural (Natural)
+import Numeric.Natural.Compat (Natural)
 #endif
 
 import TextShow.Classes (TextShow(..))
diff --git a/src/TextShow/TH.hs b/src/TextShow/TH.hs
--- a/src/TextShow/TH.hs
+++ b/src/TextShow/TH.hs
@@ -22,5 +22,5 @@
 
 -------------------------------------------------------------------------------
 
-$(deriveTextShow ''Options)
 $(deriveTextShow ''GenTextMethods)
+$(deriveTextShow ''Options)
diff --git a/src/TextShow/TH/Internal.hs b/src/TextShow/TH/Internal.hs
--- a/src/TextShow/TH/Internal.hs
+++ b/src/TextShow/TH/Internal.hs
@@ -59,8 +59,8 @@
 import           Control.Monad (unless, when)
 import           Data.Foldable.Compat
 import           Data.List.Compat
-import qualified Data.List.NonEmpty as NE (reverse)
-import           Data.List.NonEmpty (NonEmpty(..), (<|))
+import qualified Data.List.NonEmpty.Compat as NE (reverse)
+import           Data.List.NonEmpty.Compat (NonEmpty(..), (<|))
 import qualified Data.Map as Map (fromList, keys, lookup, singleton)
 import           Data.Map (Map)
 import           Data.Maybe
@@ -466,11 +466,7 @@
   case info of
     DatatypeInfo { datatypeContext   = ctxt
                  , datatypeName      = parentName
-#if MIN_VERSION_th_abstraction(0,3,0)
                  , datatypeInstTypes = instTys
-#else
-                 , datatypeVars      = instTys
-#endif
                  , datatypeVariant   = variant
                  , datatypeCons      = cons
                  } -> do
@@ -513,11 +509,7 @@
   case info of
     DatatypeInfo { datatypeContext   = ctxt
                  , datatypeName      = parentName
-#if MIN_VERSION_th_abstraction(0,3,0)
                  , datatypeInstTypes = instTys
-#else
-                 , datatypeVars      = instTys
-#endif
                  , datatypeVariant   = variant
                  , datatypeCons      = cons
                  } ->
diff --git a/src/TextShow/Text/Read.hs b/src/TextShow/Text/Read.hs
--- a/src/TextShow/Text/Read.hs
+++ b/src/TextShow/Text/Read.hs
@@ -28,11 +28,12 @@
 import TextShow.TH.Names (numberTypeName)
 #endif
 
--- | /Since: 2/
-$(deriveTextShow ''Lexeme)
 #if MIN_VERSION_base(4,6,0)
 -- | Only available with @base-4.6.0.0@ or later.
 --
 -- /Since: 2/
 $(deriveTextShow numberTypeName)
 #endif
+
+-- | /Since: 2/
+$(deriveTextShow ''Lexeme)
diff --git a/tests/Derived/RankNTypes.hs b/tests/Derived/RankNTypes.hs
--- a/tests/Derived/RankNTypes.hs
+++ b/tests/Derived/RankNTypes.hs
@@ -74,6 +74,17 @@
 
 $(return [])
 
+instance TextShow c => TextShow (Tagged2 s t c) where
+    showbPrec = $(makeShowbPrec ''Tagged2)
+
+instance TextShow1 (Tagged2 s t) where
+    liftShowbPrec = $(makeLiftShowbPrec ''Tagged2)
+
+instance TextShow2 (Tagged2 s) where
+    liftShowbPrec2 = $(makeLiftShowbPrec2 ''Tagged2)
+
+-------------------------------------------------------------------------------
+
 instance Show1 (Tagged2 s t) where
 #if defined(NEW_FUNCTOR_CLASSES)
     liftShowsPrec = $(makeLiftShowsPrec ''Tagged2)
@@ -104,14 +115,3 @@
 $(deriveTextShow  'TyFamily)
 $(deriveTextShow1 'TyFamily)
 $(deriveTextShow2 'TyFamily)
-
--------------------------------------------------------------------------------
-
-instance TextShow c => TextShow (Tagged2 s t c) where
-    showbPrec = $(makeShowbPrec ''Tagged2)
-
-instance TextShow1 (Tagged2 s t) where
-    liftShowbPrec = $(makeLiftShowbPrec ''Tagged2)
-
-instance TextShow2 (Tagged2 s) where
-    liftShowbPrec2 = $(makeLiftShowbPrec2 ''Tagged2)
diff --git a/tests/Derived/TypeSynonyms.hs b/tests/Derived/TypeSynonyms.hs
--- a/tests/Derived/TypeSynonyms.hs
+++ b/tests/Derived/TypeSynonyms.hs
@@ -43,9 +43,12 @@
 type Id a = a
 type Flip f a b = f b a
 
+#if __GLASGOW_HASKELL__ < 809
 -- Needed for the Generic1 instances
+-- TODO: Obtain this instance from base-orphans instead
 instance Functor ((,,,) a b c) where
     fmap f (a, b, c, d) = (a, b, c, f d)
+#endif
 
 -------------------------------------------------------------------------------
 
diff --git a/tests/Instances/Data/Semigroup.hs b/tests/Instances/Data/Semigroup.hs
--- a/tests/Instances/Data/Semigroup.hs
+++ b/tests/Instances/Data/Semigroup.hs
@@ -12,7 +12,7 @@
 -}
 module Instances.Data.Semigroup () where
 
-import Data.Semigroup (Arg(..))
+import Data.Semigroup.Compat (Arg(..))
 import Instances.Utils.GenericArbitrary (genericArbitrary)
 import Test.QuickCheck (Arbitrary(..))
 
diff --git a/tests/Instances/Data/Type/Equality.hs b/tests/Instances/Data/Type/Equality.hs
--- a/tests/Instances/Data/Type/Equality.hs
+++ b/tests/Instances/Data/Type/Equality.hs
@@ -20,19 +20,14 @@
 -}
 module Instances.Data.Type.Equality () where
 
-#if MIN_VERSION_base(4,7,0)
-import Data.Type.Equality ((:~:))
-# if MIN_VERSION_base(4,10,0)
-import Data.Type.Equality ((:~~:), type (~~))
-# endif
+import Data.Type.Equality.Compat
 
 import Test.QuickCheck (Arbitrary(..), arbitraryBoundedEnum)
 
 instance a ~ b => Arbitrary (a :~: b) where
     arbitrary = arbitraryBoundedEnum
 
-# if MIN_VERSION_base(4,10,0)
+#if MIN_VERSION_base(4,9,0)
 instance a ~~ b => Arbitrary (a :~~: b) where
     arbitrary = arbitraryBoundedEnum
-# endif
 #endif
diff --git a/tests/Instances/GHC/RTS/Flags.hs b/tests/Instances/GHC/RTS/Flags.hs
--- a/tests/Instances/GHC/RTS/Flags.hs
+++ b/tests/Instances/GHC/RTS/Flags.hs
@@ -36,6 +36,24 @@
 import           Test.QuickCheck (Arbitrary(..))
 import           TextShow.TH.Names
 
+$(Generics.deriveAll0 ''RTSFlags)
+$(Generics.deriveAll0 ''GCFlags)
+$(Generics.deriveAll0 ''ConcFlags)
+$(Generics.deriveAll0 ''MiscFlags)
+$(Generics.deriveAll0 ''DebugFlags)
+$(Generics.deriveAll0 ''CCFlags)
+$(Generics.deriveAll0 ''ProfFlags)
+$(Generics.deriveAll0 ''TraceFlags)
+$(Generics.deriveAll0 ''TickyFlags)
+# if MIN_VERSION_base(4,10,0)
+$(Generics.deriveAll0 ''ParFlags)
+# endif
+
+$(Generics.deriveAll0 giveGCStatsTypeName)
+$(Generics.deriveAll0 doCostCentresTypeName)
+$(Generics.deriveAll0 doHeapProfileTypeName)
+$(Generics.deriveAll0 doTraceTypeName)
+
 instance Arbitrary RTSFlags where
     arbitrary = genericArbitrary
 
@@ -86,22 +104,4 @@
 
 instance Arbitrary DoTrace' where
     arbitrary = genericArbitrary
-
-$(Generics.deriveAll0 ''RTSFlags)
-$(Generics.deriveAll0 ''GCFlags)
-$(Generics.deriveAll0 ''ConcFlags)
-$(Generics.deriveAll0 ''MiscFlags)
-$(Generics.deriveAll0 ''DebugFlags)
-$(Generics.deriveAll0 ''CCFlags)
-$(Generics.deriveAll0 ''ProfFlags)
-$(Generics.deriveAll0 ''TraceFlags)
-$(Generics.deriveAll0 ''TickyFlags)
-# if MIN_VERSION_base(4,10,0)
-$(Generics.deriveAll0 ''ParFlags)
-# endif
-
-$(Generics.deriveAll0 giveGCStatsTypeName)
-$(Generics.deriveAll0 doCostCentresTypeName)
-$(Generics.deriveAll0 doHeapProfileTypeName)
-$(Generics.deriveAll0 doTraceTypeName)
 #endif
diff --git a/tests/Instances/GHC/Stack.hs b/tests/Instances/GHC/Stack.hs
--- a/tests/Instances/GHC/Stack.hs
+++ b/tests/Instances/GHC/Stack.hs
@@ -34,6 +34,11 @@
 
 import           Test.QuickCheck (Arbitrary(..))
 
+# if !(MIN_VERSION_base(4,9,0))
+$(Generics.deriveAll0 ''CallStack)
+# endif
+$(Generics.deriveAll0 ''SrcLoc)
+
 instance Arbitrary CallStack where
 # if MIN_VERSION_base(4,9,0)
     arbitrary = oneof [ pure EmptyCallStack
@@ -46,9 +51,4 @@
 
 instance Arbitrary SrcLoc where
     arbitrary = genericArbitrary
-
-# if !(MIN_VERSION_base(4,9,0))
-$(Generics.deriveAll0 ''CallStack)
-# endif
-$(Generics.deriveAll0 ''SrcLoc)
 #endif
diff --git a/tests/Instances/Text/Read.hs b/tests/Instances/Text/Read.hs
--- a/tests/Instances/Text/Read.hs
+++ b/tests/Instances/Text/Read.hs
@@ -32,6 +32,11 @@
 import           TextShow.TH.Names (numberTypeName)
 #endif
 
+$(Generics.deriveAll0 ''Lexeme)
+#if MIN_VERSION_base(4,6,0)
+$(Generics.deriveAll0 numberTypeName)
+#endif
+
 instance Arbitrary Lexeme where
     arbitrary = genericArbitrary
 
@@ -45,9 +50,4 @@
 
 instance Arbitrary $(conT numberTypeName) where
     arbitrary = genericArbitrary
-#endif
-
-$(Generics.deriveAll0 ''Lexeme)
-#if MIN_VERSION_base(4,6,0)
-$(Generics.deriveAll0 numberTypeName)
 #endif
diff --git a/tests/Spec/Control/ApplicativeSpec.hs b/tests/Spec/Control/ApplicativeSpec.hs
--- a/tests/Spec/Control/ApplicativeSpec.hs
+++ b/tests/Spec/Control/ApplicativeSpec.hs
@@ -14,7 +14,7 @@
 import Control.Monad.Trans.Instances ()
 
 import Data.Orphans ()
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Generics.Deriving.Instances ()
 
diff --git a/tests/Spec/Control/ConcurrentSpec.hs b/tests/Spec/Control/ConcurrentSpec.hs
--- a/tests/Spec/Control/ConcurrentSpec.hs
+++ b/tests/Spec/Control/ConcurrentSpec.hs
@@ -12,7 +12,7 @@
 
 import Control.Concurrent (myThreadId)
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import GHC.Conc (BlockReason, ThreadStatus)
 
diff --git a/tests/Spec/Control/ExceptionSpec.hs b/tests/Spec/Control/ExceptionSpec.hs
--- a/tests/Spec/Control/ExceptionSpec.hs
+++ b/tests/Spec/Control/ExceptionSpec.hs
@@ -16,7 +16,7 @@
 #if MIN_VERSION_base(4,11,0)
 import Control.Exception.Base (FixIOException)
 #endif
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Instances.Control.Exception ()
 import Spec.Utils (matchesTextShowSpec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/Control/Monad/STSpec.hs b/tests/Spec/Control/Monad/STSpec.hs
--- a/tests/Spec/Control/Monad/STSpec.hs
+++ b/tests/Spec/Control/Monad/STSpec.hs
@@ -1,7 +1,7 @@
 module Spec.Control.Monad.STSpec (main, spec) where
 
 import Control.Monad.ST
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Instances.Control.Monad.ST ()
 import Spec.Utils (matchesTextShowSpec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/Data/ArraySpec.hs b/tests/Spec/Data/ArraySpec.hs
--- a/tests/Spec/Data/ArraySpec.hs
+++ b/tests/Spec/Data/ArraySpec.hs
@@ -21,7 +21,7 @@
 #if !defined(mingw32_HOST_OS) && MIN_VERSION_text(1,0,0)
 import Data.Array (Array)
 import Data.Array.Unboxed (UArray)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Spec.Utils (matchesTextShowSpec)
 
diff --git a/tests/Spec/Data/BoolSpec.hs b/tests/Spec/Data/BoolSpec.hs
--- a/tests/Spec/Data/BoolSpec.hs
+++ b/tests/Spec/Data/BoolSpec.hs
@@ -12,7 +12,7 @@
 -}
 module Spec.Data.BoolSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Spec.Utils (matchesTextShowSpec, genericTextShowSpec)
 import Test.Hspec (Spec, describe, hspec, parallel)
 
diff --git a/tests/Spec/Data/ByteStringSpec.hs b/tests/Spec/Data/ByteStringSpec.hs
--- a/tests/Spec/Data/ByteStringSpec.hs
+++ b/tests/Spec/Data/ByteStringSpec.hs
@@ -13,7 +13,7 @@
 import qualified Data.ByteString      as BS (ByteString)
 import qualified Data.ByteString.Lazy as BL (ByteString)
 import           Data.ByteString.Short (ShortByteString)
-import           Data.Proxy (Proxy(..))
+import           Data.Proxy.Compat (Proxy(..))
 
 import           Spec.Utils (matchesTextShowSpec)
 
diff --git a/tests/Spec/Data/CharSpec.hs b/tests/Spec/Data/CharSpec.hs
--- a/tests/Spec/Data/CharSpec.hs
+++ b/tests/Spec/Data/CharSpec.hs
@@ -12,7 +12,7 @@
 
 import Data.Array (elems)
 import Data.Char (GeneralCategory)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import GHC.Show (asciiTab)
 
diff --git a/tests/Spec/Data/ComplexSpec.hs b/tests/Spec/Data/ComplexSpec.hs
--- a/tests/Spec/Data/ComplexSpec.hs
+++ b/tests/Spec/Data/ComplexSpec.hs
@@ -11,7 +11,7 @@
 module Spec.Data.ComplexSpec (main, spec) where
 
 import Data.Complex (Complex)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Spec.Utils (matchesTextShowSpec)
 
diff --git a/tests/Spec/Data/DataSpec.hs b/tests/Spec/Data/DataSpec.hs
--- a/tests/Spec/Data/DataSpec.hs
+++ b/tests/Spec/Data/DataSpec.hs
@@ -11,7 +11,7 @@
 module Spec.Data.DataSpec (main, spec) where
 
 import Data.Data (Constr, ConstrRep, DataRep, DataType, Fixity)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Instances.Data.Data ()
 
diff --git a/tests/Spec/Data/DynamicSpec.hs b/tests/Spec/Data/DynamicSpec.hs
--- a/tests/Spec/Data/DynamicSpec.hs
+++ b/tests/Spec/Data/DynamicSpec.hs
@@ -11,7 +11,7 @@
 module Spec.Data.DynamicSpec (main, spec) where
 
 import Data.Dynamic (Dynamic)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Instances.Data.Dynamic ()
 
diff --git a/tests/Spec/Data/EitherSpec.hs b/tests/Spec/Data/EitherSpec.hs
--- a/tests/Spec/Data/EitherSpec.hs
+++ b/tests/Spec/Data/EitherSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.Data.EitherSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Generics.Deriving.Instances ()
 import Spec.Utils (matchesTextShow1Spec, genericTextShowSpec, genericTextShow1Spec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/Data/FixedSpec.hs b/tests/Spec/Data/FixedSpec.hs
--- a/tests/Spec/Data/FixedSpec.hs
+++ b/tests/Spec/Data/FixedSpec.hs
@@ -11,7 +11,7 @@
 module Spec.Data.FixedSpec (main, spec) where
 
 import Data.Fixed (Fixed, E0, E1, E2, E3, E6, E9, E12, showFixed)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Spec.Utils (matchesTextShowSpec)
 
diff --git a/tests/Spec/Data/FloatingSpec.hs b/tests/Spec/Data/FloatingSpec.hs
--- a/tests/Spec/Data/FloatingSpec.hs
+++ b/tests/Spec/Data/FloatingSpec.hs
@@ -12,7 +12,7 @@
 -}
 module Spec.Data.FloatingSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Data.Text.Lazy.Builder.RealFloat (FPFormat)
 
 import Instances.Data.Floating ()
diff --git a/tests/Spec/Data/Functor/ComposeSpec.hs b/tests/Spec/Data/Functor/ComposeSpec.hs
--- a/tests/Spec/Data/Functor/ComposeSpec.hs
+++ b/tests/Spec/Data/Functor/ComposeSpec.hs
@@ -13,7 +13,7 @@
 import Control.Monad.Trans.Instances ()
 
 import Data.Functor.Compose (Compose)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Spec.Utils (matchesTextShow1Spec)
 
diff --git a/tests/Spec/Data/Functor/IdentitySpec.hs b/tests/Spec/Data/Functor/IdentitySpec.hs
--- a/tests/Spec/Data/Functor/IdentitySpec.hs
+++ b/tests/Spec/Data/Functor/IdentitySpec.hs
@@ -13,7 +13,7 @@
 import Control.Monad.Trans.Instances ()
 
 import Data.Functor.Identity (Identity)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Spec.Utils (matchesTextShow1Spec)
 
diff --git a/tests/Spec/Data/Functor/ProductSpec.hs b/tests/Spec/Data/Functor/ProductSpec.hs
--- a/tests/Spec/Data/Functor/ProductSpec.hs
+++ b/tests/Spec/Data/Functor/ProductSpec.hs
@@ -13,7 +13,7 @@
 import Control.Monad.Trans.Instances ()
 
 import Data.Functor.Product (Product)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Spec.Utils (matchesTextShow1Spec)
 
diff --git a/tests/Spec/Data/Functor/SumSpec.hs b/tests/Spec/Data/Functor/SumSpec.hs
--- a/tests/Spec/Data/Functor/SumSpec.hs
+++ b/tests/Spec/Data/Functor/SumSpec.hs
@@ -13,7 +13,7 @@
 import Control.Monad.Trans.Instances ()
 
 import Data.Functor.Sum (Sum)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Spec.Utils (matchesTextShow1Spec)
 
diff --git a/tests/Spec/Data/IntegralSpec.hs b/tests/Spec/Data/IntegralSpec.hs
--- a/tests/Spec/Data/IntegralSpec.hs
+++ b/tests/Spec/Data/IntegralSpec.hs
@@ -13,7 +13,7 @@
 module Spec.Data.IntegralSpec (main, spec) where
 
 import Data.Int (Int8, Int16, Int32, Int64)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Data.Word (Word8, Word16, Word32, Word64)
 
 import Prelude ()
diff --git a/tests/Spec/Data/List/NonEmptySpec.hs b/tests/Spec/Data/List/NonEmptySpec.hs
--- a/tests/Spec/Data/List/NonEmptySpec.hs
+++ b/tests/Spec/Data/List/NonEmptySpec.hs
@@ -10,8 +10,8 @@
 -}
 module Spec.Data.List.NonEmptySpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
-import Data.List.NonEmpty (NonEmpty)
+import Data.Proxy.Compat (Proxy(..))
+import Data.List.NonEmpty.Compat (NonEmpty)
 import Data.Orphans ()
 import Spec.Utils (matchesTextShow1Spec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/Data/ListSpec.hs b/tests/Spec/Data/ListSpec.hs
--- a/tests/Spec/Data/ListSpec.hs
+++ b/tests/Spec/Data/ListSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.Data.ListSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Spec.Utils (matchesTextShowSpec)
 
diff --git a/tests/Spec/Data/MaybeSpec.hs b/tests/Spec/Data/MaybeSpec.hs
--- a/tests/Spec/Data/MaybeSpec.hs
+++ b/tests/Spec/Data/MaybeSpec.hs
@@ -11,7 +11,7 @@
 module Spec.Data.MaybeSpec (main, spec) where
 
 import Data.Orphans ()
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Spec.Utils (matchesTextShow1Spec, genericTextShowSpec, genericTextShow1Spec)
 
diff --git a/tests/Spec/Data/MonoidSpec.hs b/tests/Spec/Data/MonoidSpec.hs
--- a/tests/Spec/Data/MonoidSpec.hs
+++ b/tests/Spec/Data/MonoidSpec.hs
@@ -13,7 +13,7 @@
 module Spec.Data.MonoidSpec (main, spec) where
 
 import Data.Monoid
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Generics.Deriving.Instances ()
 
diff --git a/tests/Spec/Data/OldTypeableSpec.hs b/tests/Spec/Data/OldTypeableSpec.hs
--- a/tests/Spec/Data/OldTypeableSpec.hs
+++ b/tests/Spec/Data/OldTypeableSpec.hs
@@ -25,7 +25,7 @@
 
 #if MIN_VERSION_base(4,7,0) && !(MIN_VERSION_base(4,8,0))
 import Data.OldTypeable (TyCon, TypeRep)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Spec.Utils (matchesTextShowSpec)
 
diff --git a/tests/Spec/Data/OrdSpec.hs b/tests/Spec/Data/OrdSpec.hs
--- a/tests/Spec/Data/OrdSpec.hs
+++ b/tests/Spec/Data/OrdSpec.hs
@@ -11,7 +11,7 @@
 module Spec.Data.OrdSpec (main, spec) where
 
 import Data.Orphans ()
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Generics.Deriving.Instances ()
 
diff --git a/tests/Spec/Data/ProxySpec.hs b/tests/Spec/Data/ProxySpec.hs
--- a/tests/Spec/Data/ProxySpec.hs
+++ b/tests/Spec/Data/ProxySpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.Data.ProxySpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Generics.Deriving.Base ()
 
diff --git a/tests/Spec/Data/RatioSpec.hs b/tests/Spec/Data/RatioSpec.hs
--- a/tests/Spec/Data/RatioSpec.hs
+++ b/tests/Spec/Data/RatioSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.Data.RatioSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Data.Ratio (Ratio)
 
 import Spec.Utils (matchesTextShowSpec)
diff --git a/tests/Spec/Data/SemigroupSpec.hs b/tests/Spec/Data/SemigroupSpec.hs
--- a/tests/Spec/Data/SemigroupSpec.hs
+++ b/tests/Spec/Data/SemigroupSpec.hs
@@ -10,8 +10,8 @@
 -}
 module Spec.Data.SemigroupSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
-import Data.Semigroup (Min, Max, First, Last, WrappedMonoid, Option, Arg)
+import Data.Proxy.Compat (Proxy(..))
+import Data.Semigroup.Compat (Min, Max, First, Last, WrappedMonoid, Option, Arg)
 
 import Instances.Data.Semigroup ()
 
diff --git a/tests/Spec/Data/TextSpec.hs b/tests/Spec/Data/TextSpec.hs
--- a/tests/Spec/Data/TextSpec.hs
+++ b/tests/Spec/Data/TextSpec.hs
@@ -12,7 +12,7 @@
 -}
 module Spec.Data.TextSpec (main, spec) where
 
-import           Data.Proxy (Proxy(..))
+import           Data.Proxy.Compat (Proxy(..))
 
 import           Instances.Data.Text ()
 
diff --git a/tests/Spec/Data/TupleSpec.hs b/tests/Spec/Data/TupleSpec.hs
--- a/tests/Spec/Data/TupleSpec.hs
+++ b/tests/Spec/Data/TupleSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.Data.TupleSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Generics.Deriving.Instances ()
 import Instances.Data.Tuple ()
 import Spec.Utils (matchesTextShowSpec, matchesTextShow1Spec,
diff --git a/tests/Spec/Data/Type/CoercionSpec.hs b/tests/Spec/Data/Type/CoercionSpec.hs
--- a/tests/Spec/Data/Type/CoercionSpec.hs
+++ b/tests/Spec/Data/Type/CoercionSpec.hs
@@ -21,7 +21,7 @@
 
 #if MIN_VERSION_base(4,7,0)
 import Data.Monoid (All(..))
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Data.Type.Coercion (Coercion)
 
 import Spec.Utils (matchesTextShowSpec)
diff --git a/tests/Spec/Data/Type/EqualitySpec.hs b/tests/Spec/Data/Type/EqualitySpec.hs
--- a/tests/Spec/Data/Type/EqualitySpec.hs
+++ b/tests/Spec/Data/Type/EqualitySpec.hs
@@ -13,6 +13,9 @@
 -}
 module Spec.Data.Type.EqualitySpec (main, spec) where
 
+import Data.Proxy.Compat (Proxy(..))
+import Data.Type.Equality.Compat
+
 import Instances.Data.Type.Equality ()
 
 import Prelude ()
@@ -20,29 +23,17 @@
 
 import Test.Hspec (Spec, hspec, parallel)
 
-#if MIN_VERSION_base(4,7,0)
-import Data.Proxy (Proxy(..))
-import Data.Type.Equality ((:~:))
-# if MIN_VERSION_base(4,10,0)
-import Data.Type.Equality ((:~~:))
-# endif
-
 import Spec.Utils (matchesTextShowSpec)
 import Test.Hspec (describe)
-#endif
 
 main :: IO ()
 main = hspec spec
 
 spec :: Spec
 spec = parallel $ do
-#if MIN_VERSION_base(4,7,0)
     describe "Int :~: Int" $
         matchesTextShowSpec (Proxy :: Proxy (Int :~: Int))
-# if MIN_VERSION_base(4,10,0)
+# if MIN_VERSION_base(4,9,0)
     describe "Int :~~: Int" $
         matchesTextShowSpec (Proxy :: Proxy (Int :~~: Int))
 # endif
-#else
-    pure ()
-#endif
diff --git a/tests/Spec/Data/TypeableSpec.hs b/tests/Spec/Data/TypeableSpec.hs
--- a/tests/Spec/Data/TypeableSpec.hs
+++ b/tests/Spec/Data/TypeableSpec.hs
@@ -16,7 +16,7 @@
 -}
 module Spec.Data.TypeableSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Data.Typeable (TyCon)
 
 #if MIN_VERSION_base(4,9,0)
diff --git a/tests/Spec/Data/VersionSpec.hs b/tests/Spec/Data/VersionSpec.hs
--- a/tests/Spec/Data/VersionSpec.hs
+++ b/tests/Spec/Data/VersionSpec.hs
@@ -1,6 +1,6 @@
 module Spec.Data.VersionSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Data.Version (Version, showVersion)
 
 import Spec.Utils (matchesTextShowSpec)
diff --git a/tests/Spec/Derived/DataFamiliesSpec.hs b/tests/Spec/Derived/DataFamiliesSpec.hs
--- a/tests/Spec/Derived/DataFamiliesSpec.hs
+++ b/tests/Spec/Derived/DataFamiliesSpec.hs
@@ -16,7 +16,7 @@
 -}
 module Spec.Derived.DataFamiliesSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Derived.DataFamilies (NotAllShow)
 
diff --git a/tests/Spec/Derived/DatatypeContextsSpec.hs b/tests/Spec/Derived/DatatypeContextsSpec.hs
--- a/tests/Spec/Derived/DatatypeContextsSpec.hs
+++ b/tests/Spec/Derived/DatatypeContextsSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.Derived.DatatypeContextsSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Derived.DatatypeContexts
 import Spec.Utils (matchesTextShow1Spec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/Derived/ExistentialQuantificationSpec.hs b/tests/Spec/Derived/ExistentialQuantificationSpec.hs
--- a/tests/Spec/Derived/ExistentialQuantificationSpec.hs
+++ b/tests/Spec/Derived/ExistentialQuantificationSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.Derived.ExistentialQuantificationSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Derived.ExistentialQuantification
 import Spec.Utils (matchesTextShow1Spec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/Derived/InfixSpec.hs b/tests/Spec/Derived/InfixSpec.hs
--- a/tests/Spec/Derived/InfixSpec.hs
+++ b/tests/Spec/Derived/InfixSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.Derived.InfixSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Derived.Infix
 import Spec.Utils (matchesTextShowSpec, genericTextShowSpec, genericTextShow1Spec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/Derived/MagicHashSpec.hs b/tests/Spec/Derived/MagicHashSpec.hs
--- a/tests/Spec/Derived/MagicHashSpec.hs
+++ b/tests/Spec/Derived/MagicHashSpec.hs
@@ -13,7 +13,7 @@
 -}
 module Spec.Derived.MagicHashSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Derived.MagicHash
 import Spec.Utils
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/Derived/PolyKindsSpec.hs b/tests/Spec/Derived/PolyKindsSpec.hs
--- a/tests/Spec/Derived/PolyKindsSpec.hs
+++ b/tests/Spec/Derived/PolyKindsSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.Derived.PolyKindsSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Derived.PolyKinds
 import Spec.Utils (matchesTextShow1Spec, genericTextShowSpec, genericTextShow1Spec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/Derived/RankNTypesSpec.hs b/tests/Spec/Derived/RankNTypesSpec.hs
--- a/tests/Spec/Derived/RankNTypesSpec.hs
+++ b/tests/Spec/Derived/RankNTypesSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.Derived.RankNTypesSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Derived.RankNTypes
 import Spec.Utils (matchesTextShow1Spec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/Derived/RecordsSpec.hs b/tests/Spec/Derived/RecordsSpec.hs
--- a/tests/Spec/Derived/RecordsSpec.hs
+++ b/tests/Spec/Derived/RecordsSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.Derived.RecordsSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Derived.Records
 import Spec.Utils (matchesTextShow1Spec, genericTextShowSpec, genericTextShow1Spec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/Derived/TypeSynonymsSpec.hs b/tests/Spec/Derived/TypeSynonymsSpec.hs
--- a/tests/Spec/Derived/TypeSynonymsSpec.hs
+++ b/tests/Spec/Derived/TypeSynonymsSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.Derived.TypeSynonymsSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Derived.TypeSynonyms
 import Spec.Utils (matchesTextShowSpec, genericTextShowSpec, genericTextShow1Spec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/Foreign/C/TypesSpec.hs b/tests/Spec/Foreign/C/TypesSpec.hs
--- a/tests/Spec/Foreign/C/TypesSpec.hs
+++ b/tests/Spec/Foreign/C/TypesSpec.hs
@@ -12,7 +12,7 @@
 -}
 module Spec.Foreign.C.TypesSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Foreign.C.Types
 import Instances.Foreign.C.Types ()
 import Spec.Utils (matchesTextShowSpec)
diff --git a/tests/Spec/Foreign/PtrSpec.hs b/tests/Spec/Foreign/PtrSpec.hs
--- a/tests/Spec/Foreign/PtrSpec.hs
+++ b/tests/Spec/Foreign/PtrSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.Foreign.PtrSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Foreign.ForeignPtr (newForeignPtr_)
 import Foreign.Ptr (FunPtr, IntPtr, Ptr, WordPtr)
diff --git a/tests/Spec/FromStringTextShowSpec.hs b/tests/Spec/FromStringTextShowSpec.hs
--- a/tests/Spec/FromStringTextShowSpec.hs
+++ b/tests/Spec/FromStringTextShowSpec.hs
@@ -12,7 +12,7 @@
 -}
 module Spec.FromStringTextShowSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Instances.FromStringTextShow ()
 import Spec.Utils (matchesTextShowSpec, matchesTextShow1Spec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/FunctionsSpec.hs b/tests/Spec/FunctionsSpec.hs
--- a/tests/Spec/FunctionsSpec.hs
+++ b/tests/Spec/FunctionsSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.FunctionsSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Spec.Utils (matchesTextShowSpec)
 import Test.Hspec (Spec, describe, hspec, parallel)
 import Text.Show.Functions ()
diff --git a/tests/Spec/GHC/Conc/WindowsSpec.hs b/tests/Spec/GHC/Conc/WindowsSpec.hs
--- a/tests/Spec/GHC/Conc/WindowsSpec.hs
+++ b/tests/Spec/GHC/Conc/WindowsSpec.hs
@@ -20,7 +20,7 @@
 import Test.Hspec (Spec, hspec, parallel)
 
 #if !defined(__GHCJS__) && defined(mingw32_HOST_OS)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import GHC.Conc.Windows (ConsoleEvent)
 import Spec.Utils (matchesTextShowSpec)
 import Test.Hspec (describe)
diff --git a/tests/Spec/GHC/EventSpec.hs b/tests/Spec/GHC/EventSpec.hs
--- a/tests/Spec/GHC/EventSpec.hs
+++ b/tests/Spec/GHC/EventSpec.hs
@@ -20,7 +20,7 @@
 import Test.Hspec (Spec, hspec, parallel)
 
 #if !defined(__GHCJS__) && !defined(mingw32_HOST_OS)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import GHC.Event (Event)
 # if MIN_VERSION_base(4,8,1)
diff --git a/tests/Spec/GHC/FingerprintSpec.hs b/tests/Spec/GHC/FingerprintSpec.hs
--- a/tests/Spec/GHC/FingerprintSpec.hs
+++ b/tests/Spec/GHC/FingerprintSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.GHC.FingerprintSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Data.Orphans ()
 
 import GHC.Fingerprint.Type (Fingerprint)
diff --git a/tests/Spec/GHC/GenericsSpec.hs b/tests/Spec/GHC/GenericsSpec.hs
--- a/tests/Spec/GHC/GenericsSpec.hs
+++ b/tests/Spec/GHC/GenericsSpec.hs
@@ -18,7 +18,7 @@
 module Spec.GHC.GenericsSpec (main, spec) where
 
 import Data.Orphans ()
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Generics.Deriving.Base ( U1, Par1, Rec1, K1, M1, (:+:), (:*:), (:.:)
                               , UChar, UDouble, UFloat, UInt, UWord
diff --git a/tests/Spec/GHC/RTS/FlagsSpec.hs b/tests/Spec/GHC/RTS/FlagsSpec.hs
--- a/tests/Spec/GHC/RTS/FlagsSpec.hs
+++ b/tests/Spec/GHC/RTS/FlagsSpec.hs
@@ -18,7 +18,7 @@
 import Test.Hspec (Spec, hspec, parallel)
 
 #if MIN_VERSION_base(4,8,0)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import GHC.RTS.Flags
 import Instances.GHC.RTS.Flags
 import Spec.Utils (matchesTextShowSpec)
diff --git a/tests/Spec/GHC/StackSpec.hs b/tests/Spec/GHC/StackSpec.hs
--- a/tests/Spec/GHC/StackSpec.hs
+++ b/tests/Spec/GHC/StackSpec.hs
@@ -20,7 +20,7 @@
 import Test.Hspec (Spec, hspec, parallel)
 
 #if MIN_VERSION_base(4,8,1)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import GHC.Stack (CallStack)
 # if MIN_VERSION_base(4,9,0)
 import GHC.Stack (SrcLoc)
diff --git a/tests/Spec/GHC/StaticPtrSpec.hs b/tests/Spec/GHC/StaticPtrSpec.hs
--- a/tests/Spec/GHC/StaticPtrSpec.hs
+++ b/tests/Spec/GHC/StaticPtrSpec.hs
@@ -20,7 +20,7 @@
 import Test.Hspec (Spec, hspec, parallel)
 
 #if MIN_VERSION_base(4,8,0)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import GHC.StaticPtr (StaticPtrInfo)
 import Spec.Utils (matchesTextShowSpec)
 import Test.Hspec (describe)
diff --git a/tests/Spec/GHC/StatsSpec.hs b/tests/Spec/GHC/StatsSpec.hs
--- a/tests/Spec/GHC/StatsSpec.hs
+++ b/tests/Spec/GHC/StatsSpec.hs
@@ -21,7 +21,7 @@
 import Test.Hspec (Spec, hspec, parallel)
 
 #if !(MIN_VERSION_base(4,11,0))
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import GHC.Stats (GCStats)
 import Spec.Utils (matchesTextShowSpec)
 import Test.Hspec (describe)
diff --git a/tests/Spec/GHC/TypeLitsSpec.hs b/tests/Spec/GHC/TypeLitsSpec.hs
--- a/tests/Spec/GHC/TypeLitsSpec.hs
+++ b/tests/Spec/GHC/TypeLitsSpec.hs
@@ -24,7 +24,7 @@
 import Test.Hspec (Spec, hspec, parallel)
 
 #if MIN_VERSION_base(4,6,0)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import GHC.TypeLits
 import Spec.Utils (matchesTextShowSpec)
 import Test.Hspec (describe)
diff --git a/tests/Spec/GenericSpec.hs b/tests/Spec/GenericSpec.hs
--- a/tests/Spec/GenericSpec.hs
+++ b/tests/Spec/GenericSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.GenericSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Instances.Generic ()
 import Instances.Utils (GenericExample)
 import Spec.Utils (matchesTextShowSpec, matchesTextShow1Spec, genericTextShowSpec)
diff --git a/tests/Spec/Numeric/NaturalSpec.hs b/tests/Spec/Numeric/NaturalSpec.hs
--- a/tests/Spec/Numeric/NaturalSpec.hs
+++ b/tests/Spec/Numeric/NaturalSpec.hs
@@ -10,8 +10,8 @@
 -}
 module Spec.Numeric.NaturalSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
-import Numeric.Natural (Natural)
+import Data.Proxy.Compat (Proxy(..))
+import Numeric.Natural.Compat (Natural)
 import Spec.Utils (matchesTextShowSpec)
 import Test.Hspec (Spec, describe, hspec, parallel)
 import Test.QuickCheck.Instances ()
diff --git a/tests/Spec/OptionsSpec.hs b/tests/Spec/OptionsSpec.hs
--- a/tests/Spec/OptionsSpec.hs
+++ b/tests/Spec/OptionsSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.OptionsSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Instances.Options ()
 import Spec.Utils (matchesTextShowSpec, genericTextShowSpec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/System/ExitSpec.hs b/tests/Spec/System/ExitSpec.hs
--- a/tests/Spec/System/ExitSpec.hs
+++ b/tests/Spec/System/ExitSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.System.ExitSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Spec.Utils (matchesTextShowSpec)
 import System.Exit (ExitCode)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/System/IOSpec.hs b/tests/Spec/System/IOSpec.hs
--- a/tests/Spec/System/IOSpec.hs
+++ b/tests/Spec/System/IOSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.System.IOSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import GHC.IO.Encoding.Failure (CodingFailureMode)
 import GHC.IO.Encoding.Types (CodingProgress)
diff --git a/tests/Spec/System/Posix/TypesSpec.hs b/tests/Spec/System/Posix/TypesSpec.hs
--- a/tests/Spec/System/Posix/TypesSpec.hs
+++ b/tests/Spec/System/Posix/TypesSpec.hs
@@ -12,7 +12,7 @@
 -}
 module Spec.System.Posix.TypesSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Instances.System.Posix.Types ()
 import Spec.Utils (matchesTextShowSpec)
 import System.Posix.Types
diff --git a/tests/Spec/Text/ReadSpec.hs b/tests/Spec/Text/ReadSpec.hs
--- a/tests/Spec/Text/ReadSpec.hs
+++ b/tests/Spec/Text/ReadSpec.hs
@@ -13,7 +13,7 @@
 -}
 module Spec.Text.ReadSpec (main, spec) where
 
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 import Instances.Text.Read ()
 import Spec.Utils (matchesTextShowSpec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/Utils.hs b/tests/Spec/Utils.hs
--- a/tests/Spec/Utils.hs
+++ b/tests/Spec/Utils.hs
@@ -24,7 +24,7 @@
     ) where
 
 import Data.Functor.Classes (Show1, showsPrec1)
-import Data.Proxy (Proxy(..))
+import Data.Proxy.Compat (Proxy(..))
 
 import Generics.Deriving.Base
 
diff --git a/text-show.cabal b/text-show.cabal
--- a/text-show.cabal
+++ b/text-show.cabal
@@ -1,5 +1,5 @@
 name:                text-show
-version:             3.8.2
+version:             3.8.3
 synopsis:            Efficient conversion of values into Text
 description:         @text-show@ offers a replacement for the @Show@ typeclass intended
                      for use with @Text@ instead of @String@s. This package was created
@@ -154,22 +154,17 @@
                        TextShow.TH.Names
                        TextShow.Utils
   build-depends:       array                 >= 0.3    && < 0.6
-                     , base-compat-batteries >= 0.10   && < 0.11
+                     , base-compat-batteries >= 0.11   && < 0.12
                      , bifunctors            >= 5.1    && < 6
                      , bytestring            >= 0.9    && < 0.11
                      , bytestring-builder
                      , containers            >= 0.1    && < 0.7
-                     , contravariant         >= 0.5    && < 2
                      , generic-deriving      >= 1.11   && < 2
                      , ghc-prim
                      , integer-gmp
-                     , nats                  >= 0.1    && < 2
-                     , semigroups            >= 0.17   && < 1
-                     , tagged                >= 0.4.4  && < 1
                      , text                  >= 0.11.1 && < 1.3
-                     , th-abstraction        >= 0.2.2  && < 0.4
+                     , th-abstraction        >= 0.3    && < 0.4
                      , th-lift               >= 0.7.6  && < 1
-                     , void                  >= 0.5    && < 1
 
   if flag(base-4-9)
     build-depends:     base                  >= 4.9 && < 4.14
@@ -339,7 +334,7 @@
 
                        TextShow.TH.Names
   build-depends:       array                 >= 0.3    && < 0.6
-                     , base-compat-batteries >= 0.10   && < 0.11
+                     , base-compat-batteries >= 0.11   && < 0.12
                      , base-orphans          >= 0.6    && < 0.9
                      , bytestring            >= 0.9    && < 0.11
                      , bytestring-builder
@@ -347,11 +342,8 @@
                      , generic-deriving      >= 1.11   && < 2
                      , ghc-prim
                      , hspec                 >= 2      && < 3
-                     , nats                  >= 0.1    && < 2
                      , QuickCheck            >= 2.12   && < 2.14
                      , quickcheck-instances  >= 0.3.18 && < 0.4
-                     , semigroups            >= 0.18.3 && < 1
-                     , tagged                >= 0.8.3  && < 1
                      , template-haskell      >= 2.5    && < 2.16
                      , text                  >= 0.11.1 && < 1.3
                      , text-show
