diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,11 @@
+## 3.11 [2024.10.23]
+* Support building with GHC 9.12.
+* Add a `TextShow` instance for `IoManagerFlag` in `TextShow.GHC.RTS.Flags`
+  (if building with `base-4.21`/GHC 9.12 or later).
+* Drop support for pre-8.0 versions of GHC.
+* Remove `TextShow.Data.OldTypeable`. The code in this module only worked with
+  old versions of GHC that are no longer supported.
+
 ### 3.10.5 [2024.04.20]
 * Support building with GHC 9.10.
 * Ensure that the `TextShow` instance for `TypeRep` properly displays unboxed
diff --git a/include/generic.h b/include/generic.h
deleted file mode 100644
--- a/include/generic.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef GENERIC_H
-#define GENERIC_H
-
-#if __GLASGOW_HASKELL__ >= 709 || \
-   (__GLASGOW_HASKELL__ == 708 && \
-    defined(__GLASGOW_HASKELL_PATCHLEVEL1__) && \
-    __GLASGOW_HASKELL_PATCHLEVEL1__ == 4)
-# define __LANGUAGE_DERIVE_GENERIC1__ // Workaround for https://ghc.haskell.org/trac/ghc/ticket/9563
-#endif
-
-#endif
diff --git a/include/overlap.h b/include/overlap.h
deleted file mode 100644
--- a/include/overlap.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef OVERLAP_H
-#define OVERLAP_H
-
-#if __GLASGOW_HASKELL__ >= 710
-# define __LANGUAGE_OVERLAPPING_INSTANCES__
-# define __OVERLAPPABLE__ {-# OVERLAPPABLE #-}
-# define __OVERLAPPING__  {-# OVERLAPPING #-}
-# define __OVERLAPS__     {-# OVERLAPS #-}
-#else
-# define __LANGUAGE_OVERLAPPING_INSTANCES__ {-# LANGUAGE OverlappingInstances #-}
-# define __OVERLAPPABLE__
-# define __OVERLAPPING__
-# define __OVERLAPS__
-#endif
-
-#endif
diff --git a/shared/TextShow/TH/Names.hs b/shared/TextShow/TH/Names.hs
--- a/shared/TextShow/TH/Names.hs
+++ b/shared/TextShow/TH/Names.hs
@@ -1,5 +1,5 @@
-{-# LANGUAGE CPP             #-}
-{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE CPP                   #-}
+{-# LANGUAGE TemplateHaskellQuotes #-}
 
 {-|
 Module:      TextShow.TH.Names
@@ -17,19 +17,14 @@
     fdKeyTypeName,
     uniqueTypeName,
     asInt64ValName,
-#if MIN_VERSION_base(4,8,0)
     giveGCStatsTypeName,
     doCostCentresTypeName,
     doHeapProfileTypeName,
     doTraceTypeName,
-#endif
     ) where
 
-import Language.Haskell.TH.Syntax
-
-#if MIN_VERSION_base(4,8,2)
 import GHC.RTS.Flags (GiveGCStats, DoCostCentres, DoHeapProfile, DoTrace)
-#endif
+import Language.Haskell.TH.Syntax
 
 -------------------------------------------------------------------------------
 
@@ -79,42 +74,18 @@
 asInt64ValName = mkNameG_v "base" "GHC.Event.Unique" "asInt64"
 #endif
 
-#if MIN_VERSION_base(4,8,0)
 -- | The 'Name' of 'GiveGCStats'.
 giveGCStatsTypeName :: Name
-# if MIN_VERSION_base(4,8,2)
 giveGCStatsTypeName = ''GiveGCStats
-# else
-giveGCStatsTypeName = mkFlagsName_tc "GiveGCStats"
-# endif
 
 -- | The 'Name' of 'DoCostCentres'.
 doCostCentresTypeName :: Name
-# if MIN_VERSION_base(4,8,2)
 doCostCentresTypeName = ''DoCostCentres
-# else
-doCostCentresTypeName = mkFlagsName_tc "DoCostCentres"
-# endif
 
 -- | The 'Name' of 'DoHeapProfile'.
 doHeapProfileTypeName :: Name
-# if MIN_VERSION_base(4,8,2)
 doHeapProfileTypeName = ''DoHeapProfile
-# else
-doHeapProfileTypeName = mkFlagsName_tc "DoHeapProfile"
-# endif
 
 -- | The 'Name' of 'DoTrace'.
 doTraceTypeName :: Name
-# if MIN_VERSION_base(4,8,2)
 doTraceTypeName = ''DoTrace
-# else
-doTraceTypeName = mkFlagsName_tc "DoTrace"
-# endif
-
--- | Creates a 'Name' for a type from the "GHC.RTS.Flags" module.
-# if !(MIN_VERSION_base(4,8,2))
-mkFlagsName_tc :: String -> Name
-mkFlagsName_tc = mkNameG_tc "base" "GHC.RTS.Flags"
-# endif
-#endif
diff --git a/src/TextShow/Classes.hs b/src/TextShow/Classes.hs
--- a/src/TextShow/Classes.hs
+++ b/src/TextShow/Classes.hs
@@ -1,10 +1,8 @@
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE DeriveDataTypeable         #-}
-{-# LANGUAGE OverloadedStrings          #-}
-{-# LANGUAGE StandaloneDeriving         #-}
+{-# LANGUAGE CPP                   #-}
+{-# LANGUAGE OverloadedStrings     #-}
 
 #if __GLASGOW_HASKELL__ >= 806
-{-# LANGUAGE QuantifiedConstraints      #-}
+{-# LANGUAGE QuantifiedConstraints #-}
 #endif
 
 {-|
@@ -19,7 +17,6 @@
 -}
 module TextShow.Classes where
 
-import           Data.Data (Typeable)
 import qualified Data.Text         as TS (Text, singleton)
 import qualified Data.Text.IO      as TS (putStrLn, hPutStrLn)
 import qualified Data.Text.Lazy    as TL (Text, singleton)
@@ -177,8 +174,6 @@
 
     {-# MINIMAL showbPrec | showb #-}
 
-deriving instance Typeable TextShow
-
 -- | Surrounds 'Builder' output with parentheses if the 'Bool' parameter is 'True'.
 --
 -- /Since: 2/
@@ -421,8 +416,6 @@
 
     {-# MINIMAL liftShowbPrec #-}
 
-deriving instance Typeable TextShow1
-
 -- | Lift the standard 'showbPrec' and 'showbList' functions through the
 -- type constructor.
 --
@@ -502,8 +495,6 @@
         showbListWith (liftShowbPrec2 sp1 sl1 sp2 sl2 0)
 
     {-# MINIMAL liftShowbPrec2 #-}
-
-deriving instance Typeable TextShow2
 
 -- | Lift two 'showbPrec' functions through the type constructor.
 --
diff --git a/src/TextShow/Control/Applicative.hs b/src/TextShow/Control/Applicative.hs
--- a/src/TextShow/Control/Applicative.hs
+++ b/src/TextShow/Control/Applicative.hs
@@ -3,7 +3,7 @@
 {-# LANGUAGE PolyKinds         #-}
 {-# LANGUAGE TemplateHaskell   #-}
 
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Control.Applicative
 Copyright:   (C) 2014-2017 Ryan Scott
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
@@ -3,7 +3,7 @@
 {-# LANGUAGE MagicHash                #-}
 {-# LANGUAGE TemplateHaskell          #-}
 {-# LANGUAGE UnliftedFFITypes         #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Control.Concurrent
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/src/TextShow/Control/Exception.hs b/src/TextShow/Control/Exception.hs
--- a/src/TextShow/Control/Exception.hs
+++ b/src/TextShow/Control/Exception.hs
@@ -5,7 +5,7 @@
 #if __GLASGOW_HASKELL__ >= 806
 {-# LANGUAGE DerivingVia        #-}
 #endif
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Control.Exception
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -22,10 +22,7 @@
 
 import Control.Exception.Base
 
-import Data.Text.Lazy.Builder (fromString)
-#if MIN_VERSION_base(4,9,0)
-import Data.Text.Lazy.Builder (singleton)
-#endif
+import Data.Text.Lazy.Builder (fromString, singleton)
 
 import Prelude ()
 import Prelude.Compat
@@ -111,23 +108,15 @@
     showb BlockedIndefinitelyOnSTM = "thread blocked indefinitely in an STM transaction"
     {-# INLINE showb #-}
 
-#if MIN_VERSION_base(4,8,0)
--- | Only available with @base-4.8.0.0@ or later.
---
--- /Since: 2/
+-- | /Since: 2/
 instance TextShow AllocationLimitExceeded where
     showb AllocationLimitExceeded = "allocation limit exceeded"
     {-# INLINE showb #-}
-#endif
 
-#if MIN_VERSION_base(4,9,0)
--- | Only available with @base-4.9.0.0@ or later.
---
--- /Since: 3/
+-- | /Since: 3/
 instance TextShow TypeError where
     showb (TypeError err) = fromString err
     {-# INLINE showb #-}
-#endif
 
 #if MIN_VERSION_base(4,10,0)
 -- | Only available with @base-4.10.0.0@ or later.
@@ -177,13 +166,9 @@
 
 -- | /Since: 2/
 instance TextShow ErrorCall where
-#if MIN_VERSION_base(4,9,0)
     showb (ErrorCallWithLocation err "")  = fromString err
     showb (ErrorCallWithLocation err loc) =
       fromString err <> singleton '\n' <> fromString loc
-#else
-    showb (ErrorCall err) = fromString err
-#endif
 
 -- | /Since: 2/
 $(deriveTextShow ''MaskingState)
diff --git a/src/TextShow/Control/Monad/ST.hs b/src/TextShow/Control/Monad/ST.hs
--- a/src/TextShow/Control/Monad/ST.hs
+++ b/src/TextShow/Control/Monad/ST.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Control.Monad.ST
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/src/TextShow/Data/Array.hs b/src/TextShow/Data/Array.hs
--- a/src/TextShow/Data/Array.hs
+++ b/src/TextShow/Data/Array.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE CPP               #-}
 {-# LANGUAGE FlexibleContexts  #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Array
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/src/TextShow/Data/Array/Byte.hs b/src/TextShow/Data/Array/Byte.hs
--- a/src/TextShow/Data/Array/Byte.hs
+++ b/src/TextShow/Data/Array/Byte.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE BangPatterns #-}
 {-# LANGUAGE CPP          #-}
 {-# LANGUAGE MagicHash    #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Array.Byte
 Copyright:   (C) 2022 Ryan Scott
diff --git a/src/TextShow/Data/Bool.hs b/src/TextShow/Data/Bool.hs
--- a/src/TextShow/Data/Bool.hs
+++ b/src/TextShow/Data/Bool.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Bool
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/src/TextShow/Data/ByteString.hs b/src/TextShow/Data/ByteString.hs
--- a/src/TextShow/Data/ByteString.hs
+++ b/src/TextShow/Data/ByteString.hs
@@ -1,10 +1,6 @@
 {-# LANGUAGE BangPatterns    #-}
-{-# LANGUAGE CPP             #-}
 {-# LANGUAGE MagicHash       #-}
-#if !(MIN_VERSION_bytestring(0,10,0))
-{-# LANGUAGE TemplateHaskell #-}
-#endif
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      TextShow.Data.ByteString
@@ -31,16 +27,6 @@
 import           TextShow.Data.Char ()
 import           TextShow.Data.List ()
 
-#if !(MIN_VERSION_bytestring(0,10,0))
-import           Data.Word (Word8)
-
-import           Foreign.ForeignPtr (withForeignPtr)
-import           Foreign.Ptr (plusPtr)
-import           Foreign.Storable (peek, peekByteOff)
-
-import           TextShow.TH.Internal (deriveTextShow)
-#endif
-
 ------------------------------------------------------------------------
 -- Primop wrappers
 
@@ -59,31 +45,12 @@
 -- | /Since: 2/
 instance TextShow BS.ByteString where
     {-# INLINE showb #-}
-#if MIN_VERSION_bytestring(0,10,0)
     showb = showb . BS.unpackChars
-#else
-    showb = showb . unpackWith BS.w2c
 
--- | /O(n)/ Converts a 'ByteString' to a '[a]', using a conversion function.
-unpackWith :: (Word8 -> a) -> BS.ByteString -> [a]
-unpackWith _ (BS.PS _  _ 0) = []
-unpackWith k (BS.PS ps s l) = BS.inlinePerformIO $ withForeignPtr ps $ \p ->
-        go (p `plusPtr` s) (l - 1) []
-    where
-        go !p !0 !acc = peek p          >>= \e -> return (k e : acc)
-        go !p !n !acc = peekByteOff p n >>= \e -> go p (n-1) (k e : acc)
-{-# INLINE unpackWith #-}
-#endif
-
-#if MIN_VERSION_bytestring(0,10,0)
 -- | /Since: 2/
 instance TextShow BL.ByteString where
     showb = showb . BL.unpackChars
     {-# INLINE showb #-}
-#else
--- | /Since: 2/
-$(deriveTextShow ''BL.ByteString)
-#endif
 
 -- | /Since: 2/
 instance TextShow ShortByteString where
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
@@ -1,6 +1,6 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE TemplateHaskell   #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Char
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/src/TextShow/Data/Complex.hs b/src/TextShow/Data/Complex.hs
--- a/src/TextShow/Data/Complex.hs
+++ b/src/TextShow/Data/Complex.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 #if __GLASGOW_HASKELL__ == 800
 -- See Note [Increased simpl-tick-factor on old GHCs]
 {-# OPTIONS_GHC -fsimpl-tick-factor=200 #-}
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
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Data
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/src/TextShow/Data/Dynamic.hs b/src/TextShow/Data/Dynamic.hs
--- a/src/TextShow/Data/Dynamic.hs
+++ b/src/TextShow/Data/Dynamic.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Dynamic
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/src/TextShow/Data/Either.hs b/src/TextShow/Data/Either.hs
--- a/src/TextShow/Data/Either.hs
+++ b/src/TextShow/Data/Either.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Either
 Copyright:   (C) 2014-2017 Ryan Scott
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
@@ -1,5 +1,5 @@
 {-# LANGUAGE CPP #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Fixed
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -16,7 +16,7 @@
 
 import Data.Fixed (Fixed(..), HasResolution(..))
 import Data.Int (Int64)
-import Data.Semigroup.Compat (mtimesDefault)
+import Data.Semigroup (mtimesDefault)
 import Data.Text.Lazy.Builder (Builder, singleton)
 
 import Prelude ()
@@ -44,12 +44,8 @@
     (i, d)  = divMod (fromInteger a) res
     digits  = ceiling (logBase 10 (fromInteger $ resolution fa) :: Double)
     maxnum  = 10 ^ digits
-#if MIN_VERSION_base(4,8,0)
     fracNum = divCeil (d * maxnum) res
     divCeil x y = (x + y - 1) `div` y
-#else
-    fracNum = div (d * maxnum) res
-#endif
 
 -- | Only works for positive 'Integer's.
 showbIntegerZeroes :: Bool -> Int64 -> Integer -> Builder
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
@@ -1,7 +1,7 @@
 {-# LANGUAGE CPP               #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE TemplateHaskell   #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Floating
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/src/TextShow/Data/Functor/Compose.hs b/src/TextShow/Data/Functor/Compose.hs
--- a/src/TextShow/Data/Functor/Compose.hs
+++ b/src/TextShow/Data/Functor/Compose.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      TextShow.Data.Functor.Compose
diff --git a/src/TextShow/Data/Functor/Identity.hs b/src/TextShow/Data/Functor/Identity.hs
--- a/src/TextShow/Data/Functor/Identity.hs
+++ b/src/TextShow/Data/Functor/Identity.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Functor.Identity
 Copyright:   (C) 2014-2017 Ryan Scott
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
@@ -1,6 +1,6 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      TextShow.Data.Functor.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
@@ -1,6 +1,6 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      TextShow.Data.Functor.Sum
diff --git a/src/TextShow/Data/Integral.hs b/src/TextShow/Data/Integral.hs
--- a/src/TextShow/Data/Integral.hs
+++ b/src/TextShow/Data/Integral.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE CPP               #-}
 {-# LANGUAGE MagicHash         #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Integral
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/src/TextShow/Data/List.hs b/src/TextShow/Data/List.hs
--- a/src/TextShow/Data/List.hs
+++ b/src/TextShow/Data/List.hs
@@ -1,4 +1,4 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.List
 Copyright:   (C) 2014-2017 Ryan Scott
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
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      TextShow.Data.List.NonEmpty
@@ -15,7 +15,7 @@
 -}
 module TextShow.Data.List.NonEmpty () where
 
-import Data.List.NonEmpty.Compat (NonEmpty)
+import Data.List.NonEmpty (NonEmpty)
 
 import TextShow.Data.List ()
 import TextShow.TH.Internal (deriveTextShow, deriveTextShow1)
diff --git a/src/TextShow/Data/Maybe.hs b/src/TextShow/Data/Maybe.hs
--- a/src/TextShow/Data/Maybe.hs
+++ b/src/TextShow/Data/Maybe.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Maybe
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/src/TextShow/Data/Monoid.hs b/src/TextShow/Data/Monoid.hs
--- a/src/TextShow/Data/Monoid.hs
+++ b/src/TextShow/Data/Monoid.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE CPP              #-}
-{-# LANGUAGE TemplateHaskell  #-}
-#if MIN_VERSION_base(4,8,0)
 {-# LANGUAGE FlexibleContexts #-}
-#endif
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# LANGUAGE TemplateHaskell  #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Monoid
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -18,17 +16,12 @@
 -}
 module TextShow.Data.Monoid () where
 
-import Data.Monoid.Compat (All, Any, Dual, First, Last, Product, Sum)
+import Data.Monoid (All, Alt, Any, Dual, First, Last, Product, Sum)
 
+import TextShow.Classes (TextShow(..))
 import TextShow.Data.Bool ()
 import TextShow.Data.Maybe ()
-import TextShow.TH.Internal (deriveTextShow, deriveTextShow1)
-
-#if MIN_VERSION_base(4,8,0)
-import Data.Monoid (Alt)
-import TextShow.Classes (TextShow(..))
-import TextShow.TH.Internal (makeShowbPrec)
-#endif
+import TextShow.TH.Internal (deriveTextShow, deriveTextShow1, makeShowbPrec)
 
 #if MIN_VERSION_base(4,12,0)
 import Data.Monoid (Ap)
@@ -59,18 +52,12 @@
 -- | /Since: 2/
 $(deriveTextShow1 ''Sum)
 
-#if MIN_VERSION_base(4,8,0)
--- | Only available with @base-4.8.0.0@ or later.
---
--- /Since: 2/
+-- | /Since: 2/
 instance TextShow (f a) => TextShow (Alt f a) where
     showbPrec = $(makeShowbPrec ''Alt)
 
--- | Only available with @base-4.8.0.0@ or later.
---
--- /Since: 2/
+-- | /Since: 2/
 $(deriveTextShow1 ''Alt)
-#endif
 
 #if MIN_VERSION_base(4,12,0)
 -- | Only available with @base-4.12.0.0@ or later.
diff --git a/src/TextShow/Data/OldTypeable.hs b/src/TextShow/Data/OldTypeable.hs
deleted file mode 100644
--- a/src/TextShow/Data/OldTypeable.hs
+++ /dev/null
@@ -1,60 +0,0 @@
-{-# LANGUAGE CPP               #-}
-
-#if !(MIN_VERSION_base(4,8,0))
-{-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-orphans -fno-warn-warnings-deprecations #-}
-#endif
-{-|
-Module:      TextShow.Data.OldTypeable
-Copyright:   (C) 2014-2017 Ryan Scott
-License:     BSD-style (see the file LICENSE)
-Maintainer:  Ryan Scott
-Stability:   Provisional
-Portability: GHC
-
-'TextShow' instances for data types in the @OldTypeable@ module.
-This module only exports functions if using @base-4.7@.
-
-/Since: 2/
--}
-module TextShow.Data.OldTypeable () where
-
-#if !(MIN_VERSION_base(4,8,0))
-import Data.OldTypeable.Internal (TyCon(TyCon, tyConName), TypeRep(..),
-                                  funTc, listTc)
-import Data.Text.Lazy.Builder (fromString, singleton)
-
-import Prelude ()
-import Prelude.Compat
-
-import TextShow.Classes (TextShow(..), showbParen, showbSpace)
-import TextShow.Data.Typeable.Utils (showbArgs, showbTuple)
-import TextShow.Utils (isTupleString)
-
--- | Does the 'TyCon' represent a tuple type constructor?
-isTupleTyCon :: TyCon -> Bool
-isTupleTyCon (TyCon _ _ _ str) = isTupleString str
-{-# INLINE isTupleTyCon #-}
-
--- | /Since: 2/
-instance TextShow TyCon where
-    showb = fromString . tyConName
-    {-# INLINE showb #-}
-
--- | /Since: 2/
-instance TextShow TypeRep where
-    showbPrec p (TypeRep _ tycon tys) =
-        case tys of
-          [] -> showb tycon
-          [x]   | tycon == listTc -> singleton '[' <> showb x <> singleton ']'
-          [a,r] | tycon == funTc  -> showbParen (p > 8) $
-                                        showbPrec 9 a
-                                     <> " -> "
-                                     <> showbPrec 8 r
-          xs | isTupleTyCon tycon -> showbTuple xs
-             | otherwise          -> showbParen (p > 9) $
-                                        showbPrec p tycon
-                                     <> showbSpace
-                                     <> showbArgs showbSpace tys
-    {-# INLINE showbPrec #-}
-#endif
diff --git a/src/TextShow/Data/Ord.hs b/src/TextShow/Data/Ord.hs
--- a/src/TextShow/Data/Ord.hs
+++ b/src/TextShow/Data/Ord.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Ord
 Copyright:   (C) 2014-2017 Ryan Scott
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
@@ -3,7 +3,7 @@
 {-# LANGUAGE PolyKinds         #-}
 {-# LANGUAGE TemplateHaskell   #-}
 
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      TextShow.Data.Proxy
@@ -19,7 +19,7 @@
 -}
 module TextShow.Data.Proxy () where
 
-import Data.Proxy.Compat (Proxy)
+import Data.Proxy (Proxy)
 
 import TextShow.Classes (TextShow(..))
 import TextShow.TH.Internal (deriveTextShow1, makeShowbPrec,
diff --git a/src/TextShow/Data/Ratio.hs b/src/TextShow/Data/Ratio.hs
--- a/src/TextShow/Data/Ratio.hs
+++ b/src/TextShow/Data/Ratio.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      TextShow.Data.Ratio
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
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      TextShow.Data.Semigroup
@@ -15,7 +15,7 @@
 -}
 module TextShow.Data.Semigroup () where
 
-import Data.Semigroup.Compat (Min, Max, First, Last, WrappedMonoid, Arg)
+import Data.Semigroup (Min, Max, First, Last, WrappedMonoid, Arg)
 
 import TextShow.Data.Maybe ()
 import TextShow.TH.Internal (deriveTextShow, deriveTextShow1, deriveTextShow2)
diff --git a/src/TextShow/Data/Text.hs b/src/TextShow/Data/Text.hs
--- a/src/TextShow/Data/Text.hs
+++ b/src/TextShow/Data/Text.hs
@@ -1,10 +1,7 @@
-{-# LANGUAGE CPP               #-}
 {-# LANGUAGE OverloadedStrings #-}
-#if MIN_VERSION_text(0,9,0)
 {-# LANGUAGE TemplateHaskell   #-}
-#endif
-{-# OPTIONS_GHC -fno-warn-deprecations #-} -- TODO: Remove this later
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-deprecations #-} -- TODO: Remove this later
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Text
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -26,30 +23,24 @@
 module TextShow.Data.Text () where
 
 import qualified Data.Text as TS
+import           Data.Text.Encoding (Decoding(..))
 import           Data.Text.Encoding.Error (UnicodeException(..))
+import           Data.Text.Internal.Fusion.Size (Size)
 import qualified Data.Text.Lazy as TL
-import           Data.Text.Lazy.Builder (Builder, fromString, toLazyText)
+import           Data.Text.Lazy.Builder (Builder, fromString, singleton,
+                                         toLazyText)
 
+import           GHC.Show (appPrec)
+
 import           Prelude ()
 import           Prelude.Compat
 
-import           TextShow.Classes (TextShow(..))
+import           TextShow.Classes (TextShow(..), showbParen)
+import           TextShow.Data.ByteString ()
 import           TextShow.Data.Char (showbString)
 import           TextShow.Data.Integral (showbHex)
 import           TextShow.TH.Internal (deriveTextShow)
 
-#if MIN_VERSION_text(1,0,0)
-import           Data.Text.Encoding (Decoding(..))
-import           Data.Text.Lazy.Builder (singleton)
-import           GHC.Show (appPrec)
-import           TextShow.Classes (showbParen)
-import           TextShow.Data.ByteString ()
-#endif
-
-#if MIN_VERSION_text(1,1,0)
-import           Data.Text.Internal.Fusion.Size (Size)
-#endif
-
 -- | /Since: 2/
 instance TextShow TS.Text where
     showb = showbString . TS.unpack
@@ -76,21 +67,13 @@
     showb (EncodeError desc Nothing)
         = "Cannot encode input: " <> fromString desc
 
-#if MIN_VERSION_text(1,0,0)
--- | Only available with @text-1.0.0.0@ or later.
---
--- /Since: 2/
+-- | /Since: 2/
 instance TextShow Decoding where
     showbPrec p (Some t bs _) = showbParen (p > appPrec) $
         "Some " <> showb t <>
         singleton ' ' <> showb bs <>
         " _"
     {-# INLINE showbPrec #-}
-#endif
 
-#if MIN_VERSION_text(1,1,0)
--- | Only available with @text-1.1.0.0@ or later.
---
--- /Since: 2/
+-- | /Since: 2/
 $(deriveTextShow ''Size)
-#endif
diff --git a/src/TextShow/Data/Tuple.hs b/src/TextShow/Data/Tuple.hs
--- a/src/TextShow/Data/Tuple.hs
+++ b/src/TextShow/Data/Tuple.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE CPP               #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE TemplateHaskell   #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Tuple
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/src/TextShow/Data/Type/Coercion.hs b/src/TextShow/Data/Type/Coercion.hs
--- a/src/TextShow/Data/Type/Coercion.hs
+++ b/src/TextShow/Data/Type/Coercion.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE GADTs           #-}
 {-# LANGUAGE PolyKinds       #-}
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Type.Coercion
 Copyright:   (C) 2014-2017 Ryan Scott
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,9 +1,8 @@
-{-# LANGUAGE CPP             #-}
 {-# LANGUAGE GADTs           #-}
 {-# LANGUAGE PolyKinds       #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE TypeOperators   #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Type.Equality
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -33,7 +32,6 @@
 -- | /Since: 2/
 $(deriveTextShow2 ''(:~:))
 
-#if MIN_VERSION_base(4,9,0)
 -- | /Since: 3.6/
 $(deriveTextShow ''(:~~:))
 
@@ -43,4 +41,3 @@
 
 -- | /Since: 3.6/
 $(deriveTextShow2 ''(:~~:))
-#endif
diff --git a/src/TextShow/Data/Typeable.hs b/src/TextShow/Data/Typeable.hs
--- a/src/TextShow/Data/Typeable.hs
+++ b/src/TextShow/Data/Typeable.hs
@@ -10,7 +10,7 @@
 {-# LANGUAGE TypeApplications  #-}
 #endif
 
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      TextShow.Data.Typeable
@@ -47,27 +47,15 @@
                                   SomeTypeRep(..), TypeRep,
                                   eqTypeRep, tyConName, typeRep, typeRepTyCon)
 #else /* !(MIN_VERSION_base(4,10,0) */
-import           Data.Text.Lazy.Builder (fromString, singleton)
+import           Data.Text.Lazy.Builder (Builder, fromString, singleton)
 import           Data.Typeable (TypeRep, typeRepArgs, typeRepTyCon)
-import           Data.Typeable.Internal (tyConName)
-# if MIN_VERSION_base(4,8,0)
-import           Data.Typeable.Internal (typeRepKinds)
-# endif
-# if MIN_VERSION_base(4,9,0)
-import           Data.Text.Lazy.Builder (Builder)
 import           Data.Typeable.Internal (Proxy(..), Typeable,
-                                         TypeRep(TypeRep), typeRep)
-import           GHC.Exts (RuntimeRep(..), TYPE)
-# else
-import           Data.Typeable.Internal (funTc, listTc)
-# endif
+                                         TypeRep(TypeRep), tyConName, typeRep,
+                                         typeRepKinds)
 
-# if MIN_VERSION_base(4,9,0)
-import           GHC.Exts (Addr#, Char(..), (+#), eqChar#, indexCharOffAddr#)
+import           GHC.Exts (Addr#, Char(..), RuntimeRep(..), TYPE,
+                           (+#), eqChar#, indexCharOffAddr#)
 import           GHC.Types (TyCon(..), TrName(..), Module(..), isTrue#)
-# else
-import           Data.Typeable.Internal (TyCon)
-# endif
 
 import           TextShow.Classes (TextShow(..), showbParen, showbSpace)
 import           TextShow.Data.List ()
@@ -86,7 +74,6 @@
 #endif
 
 #if !(MIN_VERSION_base(4,10,0))
-# if MIN_VERSION_base(4,9,0)
 tyConOf :: Typeable a => Proxy a -> TyCon
 tyConOf = typeRepTyCon . typeRep
 
@@ -104,15 +91,6 @@
 
 tc'Unlifted :: TyCon
 tc'Unlifted = tyConOf (Proxy :: Proxy 'PtrRepUnlifted)
-# else
--- | The list 'TyCon'.
-tcList :: TyCon
-tcList = listTc
-
--- | The function (@->@) 'TyCon'.
-tcFun :: TyCon
-tcFun = funTc
-# endif
 #endif
 
 -- | Does the 'TyCon' represent a tuple type constructor?
@@ -269,23 +247,17 @@
 isListTyCon :: TyCon -> Bool
 isListTyCon tc = tc == typeRepTyCon (typeRep :: TypeRep [Int])
 #else
--- | Only available with @base-4.9@ or earlier.
+-- | Only available with @base-4.9@.
 --
 -- /Since: 2/
 instance TextShow TypeRep where
     showbPrec p tyrep =
         case tys of
           [] -> showb tycon
-# if MIN_VERSION_base(4,9,0)
           [x@(TypeRep _ argCon _ _)]
-# else
-          [x]
-# endif
             | tycon == tcList -> singleton '[' <> showb x <> singleton ']'
-# if MIN_VERSION_base(4,9,0)
             | tycon == tcTYPE && argCon == tc'Lifted   -> singleton '*'
             | tycon == tcTYPE && argCon == tc'Unlifted -> singleton '#'
-# endif
           [a,r] | tycon == tcFun  -> showbParen (p > 8) $
                                         showbPrec 9 a
                                      <> " -> "
@@ -294,34 +266,22 @@
              | otherwise          -> showbParen (p > 9) $
                                         showbPrec p tycon
                                      <> showbSpace
-                                     <> showbArgs showbSpace
-# if MIN_VERSION_base(4,8,0)
-                                                             (kinds ++ tys)
-# else
-                                                             tys
-# endif
+                                     <> showbArgs showbSpace (kinds ++ tys)
       where
         tycon = typeRepTyCon tyrep
         tys   = typeRepArgs tyrep
-# if MIN_VERSION_base(4,8,0)
         kinds = typeRepKinds tyrep
-# endif
 #endif
 
 -- | /Since: 2/
 instance TextShow TyCon where
 #if MIN_VERSION_base(4,10,0)
     showbPrec p (TyCon _ _ _ tc_name _ _) = showbPrec p tc_name
-#elif MIN_VERSION_base(4,9,0)
-    showb (TyCon _ _ _ tc_name) = showb tc_name
 #else
-    showb = fromString . tyConName
+    showb (TyCon _ _ _ tc_name) = showb tc_name
 #endif
 
-#if MIN_VERSION_base(4,9,0)
--- | Only available with @base-4.9.0.0@ or later.
---
--- /Since: 3/
+-- | /Since: 3/
 instance TextShow TrName where
     showb (TrNameS s) = unpackCStringToBuilder# s
     showb (TrNameD s) = fromString s
@@ -341,10 +301,7 @@
         !ch = indexCharOffAddr# addr nh
 {-# NOINLINE unpackCStringToBuilder# #-}
 
--- | Only available with @base-4.9.0.0@ or later.
---
--- /Since: 3/
+-- | /Since: 3/
 instance TextShow Module where
     showb (Module p m) = showb p <> singleton ':' <> showb m
     {-# INLINE showb #-}
-#endif
diff --git a/src/TextShow/Data/Typeable/Utils.hs b/src/TextShow/Data/Typeable/Utils.hs
--- a/src/TextShow/Data/Typeable/Utils.hs
+++ b/src/TextShow/Data/Typeable/Utils.hs
@@ -6,7 +6,7 @@
 Stability:   Provisional
 Portability: GHC
 
-Utility functions for showing data types in the @Typeable@ (or @OldTypeable@) module.
+Utility functions for showing data types in the @Typeable@ module.
 -}
 module TextShow.Data.Typeable.Utils (showbArgs, showbTuple) where
 
diff --git a/src/TextShow/Data/Version.hs b/src/TextShow/Data/Version.hs
--- a/src/TextShow/Data/Version.hs
+++ b/src/TextShow/Data/Version.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Version
 Copyright:   (C) 2014-2017 Ryan Scott
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
@@ -1,4 +1,4 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Data.Void
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -13,7 +13,7 @@
 -}
 module TextShow.Data.Void () where
 
-import Data.Void.Compat (Void, absurd)
+import Data.Void (Void, absurd)
 import Prelude ()
 import TextShow.Classes (TextShow(..))
 
diff --git a/src/TextShow/Debug/Trace/Generic.hs b/src/TextShow/Debug/Trace/Generic.hs
--- a/src/TextShow/Debug/Trace/Generic.hs
+++ b/src/TextShow/Debug/Trace/Generic.hs
@@ -19,7 +19,7 @@
     , genericTraceTextShowM
     ) where
 
-import Generics.Deriving.Base (Generic, Rep)
+import GHC.Generics (Generic, Rep)
 
 import Prelude ()
 import Prelude.Compat
diff --git a/src/TextShow/Foreign/C/Types.hs b/src/TextShow/Foreign/C/Types.hs
--- a/src/TextShow/Foreign/C/Types.hs
+++ b/src/TextShow/Foreign/C/Types.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE CPP                        #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE StandaloneDeriving         #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      TextShow.Foreign.C.Types
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
@@ -1,6 +1,6 @@
 {-# LANGUAGE CPP       #-}
 {-# LANGUAGE MagicHash #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Foreign.Ptr
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -16,7 +16,7 @@
 -}
 module TextShow.Foreign.Ptr () where
 
-import Data.Semigroup.Compat (mtimesDefault)
+import Data.Semigroup (mtimesDefault)
 import Data.Text.Lazy.Builder (Builder, singleton)
 
 import Foreign.ForeignPtr (ForeignPtr)
diff --git a/src/TextShow/FromStringTextShow.hs b/src/TextShow/FromStringTextShow.hs
--- a/src/TextShow/FromStringTextShow.hs
+++ b/src/TextShow/FromStringTextShow.hs
@@ -1,9 +1,8 @@
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE DataKinds                  #-}
 {-# LANGUAGE DeriveDataTypeable         #-}
 {-# LANGUAGE DeriveFoldable             #-}
 {-# LANGUAGE DeriveFunctor              #-}
 {-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE DeriveLift                 #-}
 {-# LANGUAGE DeriveTraversable          #-}
 {-# LANGUAGE FlexibleContexts           #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
@@ -12,13 +11,8 @@
 {-# LANGUAGE ScopedTypeVariables        #-}
 {-# LANGUAGE StandaloneDeriving         #-}
 {-# LANGUAGE TemplateHaskell            #-}
-{-# LANGUAGE TypeFamilies               #-}
 
-#if __GLASGOW_HASKELL__ >= 800
-{-# LANGUAGE DeriveLift                 #-}
-#endif
-
-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+{-# OPTIONS_GHC -Wno-name-shadowing #-}
 
 {-|
 Module:      TextShow.FromStringTextShow
@@ -39,21 +33,16 @@
     , FromTextShow2(..)
     ) where
 
-#include "generic.h"
-
 import           Data.Bifunctor.TH (deriveBifunctor, deriveBifoldable,
                                     deriveBitraversable)
 import           Data.Coerce (coerce)
-import           Data.Data (Data, Typeable)
-import           Data.Functor.Classes (Show1(..), showsPrec1)
-
-#if !defined(__LANGUAGE_DERIVE_GENERIC1__)
-import qualified Generics.Deriving.TH as Generics
-#endif
+import           Data.Data (Data)
+import           Data.Functor.Classes (Show1(..), Show2(..),
+                                       showsPrec1, showsPrec2)
 
 import           GHC.Generics (Generic, Generic1)
 
-import           Language.Haskell.TH.Lift
+import           Language.Haskell.TH.Syntax (Lift)
 
 import           Prelude ()
 import           Prelude.Compat
@@ -66,12 +55,6 @@
                                    showbPrecToShowsPrec, showsPrecToShowbPrec,
                                    showbToShows, showsToShowb)
 
-#if defined(NEW_FUNCTOR_CLASSES)
-import           Data.Functor.Classes (Show2(..), showsPrec2)
-#else
-import           Text.Show (showListWith)
-#endif
-
 -------------------------------------------------------------------------------
 
 -- | An adapter newtype, suitable for @DerivingVia@.
@@ -90,12 +73,9 @@
            , Functor
            , Generic
            , Generic1
-#if __GLASGOW_HASKELL__ >= 800
            , Lift
-#endif
            , Ord
            , Traversable
-           , Typeable
            )
 
 instance Read a => Read (FromStringShow a) where
@@ -132,13 +112,10 @@
            , Functor
            , Generic
            , Generic1
-#if __GLASGOW_HASKELL__ >= 800
            , Lift
-#endif
            , Ord
            , TextShow
            , Traversable
-           , Typeable
            )
 
 instance Read a => Read (FromTextShow a) where
@@ -168,43 +145,25 @@
 -- /Since: 3/
 newtype FromStringShow1 f a = FromStringShow1 { fromStringShow1 :: f a }
   deriving ( Eq
-           , Ord
-           , Generic
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
-           , Generic1
-#endif
-#if __GLASGOW_HASKELL__ >= 800
            , Data
            , Foldable
            , Functor
+           , Generic
+           , Generic1
            , Lift
+           , Ord
            , Show1 -- TODO: Manually implement this when you
                    -- can derive Show1 (someday)
            , Traversable
-#endif
            )
 
-#if __GLASGOW_HASKELL__ < 800
--- TODO: Manually implement this when you can derive Show1 (someday)
-deriving instance Show1       f => Show1       (FromStringShow1 f)
-deriving instance Functor     f => Functor     (FromStringShow1 f)
-deriving instance Foldable    f => Foldable    (FromStringShow1 f)
-deriving instance Traversable f => Traversable (FromStringShow1 f)
-deriving instance Typeable FromStringShow1
-deriving instance ( Data (f a), Typeable f, Typeable a
-                  ) => Data (FromStringShow1 f (a :: *))
-#endif
-
 instance Read (f a) => Read (FromStringShow1 f a) where
     readPrec     = coerce (readPrec     :: ReadPrec (f a))
     readsPrec    = coerce (readsPrec    :: Int -> ReadS (f a))
     readList     = coerce (readList     :: ReadS [f a])
     readListPrec = coerce (readListPrec :: ReadPrec [f a])
 
-#if defined(NEW_FUNCTOR_CLASSES)
--- | Not available if using @transformers-0.4@
---
--- This instance is somewhat strange, as its instance context mixes a
+-- | This instance is somewhat strange, as its instance context mixes a
 -- 'Show1' constraint with a 'TextShow' constraint. This is done for
 -- consistency with the 'Show' instance for 'FromTextShow1', which mixes
 -- constraints in a similar way to satisfy superclass constraints. See the
@@ -212,7 +171,6 @@
 instance (Show1 f, TextShow a) => TextShow (FromStringShow1 f a) where
     showbPrec = showbPrec1
 
--- | Not available if using @transformers-0.4@
 instance Show1 f => TextShow1 (FromStringShow1 f) where
     liftShowbPrec sp sl p =
         showsPrecToShowbPrec (liftShowsPrec (showbPrecToShowsPrec sp)
@@ -225,7 +183,6 @@
       where
         coerceList :: [FromStringShow1 f a] -> [f a]
         coerceList = coerce
-#endif
 
 instance (Show1 f, Show a) => Show (FromStringShow1 f a) where
     showsPrec = showsPrec1
@@ -247,41 +204,24 @@
 -- /Since: 3/
 newtype FromTextShow1 f a = FromTextShow1 { fromTextShow1 :: f a }
   deriving ( Eq
-           , Ord
-           , Generic
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
-           , Generic1
-#endif
-#if __GLASGOW_HASKELL__ >= 800
            , Data
            , Foldable
            , Functor
+           , Generic
+           , Generic1
            , Lift
+           , Ord
            , TextShow1
            , Traversable
-#endif
            )
 
-#if __GLASGOW_HASKELL__ < 800
-deriving instance TextShow1   f => TextShow1   (FromTextShow1 f)
-deriving instance Functor     f => Functor     (FromTextShow1 f)
-deriving instance Foldable    f => Foldable    (FromTextShow1 f)
-deriving instance Traversable f => Traversable (FromTextShow1 f)
-deriving instance Typeable FromTextShow1
-deriving instance ( Data (f a), Typeable f, Typeable a
-                  ) => Data (FromTextShow1 f (a :: *))
-#endif
-
 instance Read (f a) => Read (FromTextShow1 f a) where
     readPrec     = coerce (readPrec     :: ReadPrec (f a))
     readsPrec    = coerce (readsPrec    :: Int -> ReadS (f a))
     readList     = coerce (readList     :: ReadS [f a])
     readListPrec = coerce (readListPrec :: ReadPrec [f a])
 
-#if defined(NEW_FUNCTOR_CLASSES)
--- | Not available if using @transformers-0.4@
---
--- This instance is somewhat strange, as its instance context mixes a
+-- | This instance is somewhat strange, as its instance context mixes a
 -- 'TextShow1' constraint with a 'Show' constraint. The 'Show' constraint is
 -- necessary to satisfy the quantified 'Show' superclass in 'Show1'. Really,
 -- the 'Show' constraint ought to be a 'TextShow' constraint instead, but GHC
@@ -293,10 +233,8 @@
 -- classes. If you wish to do this, derive via 'FromTextShow' instead.
 instance (TextShow1 f, Show a) => Show (FromTextShow1 f a) where
   showsPrec = showsPrec1
-#endif
 
 instance TextShow1 f => Show1 (FromTextShow1 f) where
-#if defined(NEW_FUNCTOR_CLASSES)
     liftShowList sp sl =
         showbToShows (liftShowbList (showsPrecToShowbPrec sp)
                                     (showsToShowb         sl))
@@ -304,11 +242,8 @@
       where
         coerceList :: [FromTextShow1 f a] -> [f a]
         coerceList = coerce
-    liftShowsPrec sp sl p
-#else
-    showsPrec1 p
-#endif
-      = showbPrecToShowsPrec (liftShowbPrec (showsPrecToShowbPrec sp)
+    liftShowsPrec sp sl p =
+        showbPrecToShowsPrec (liftShowbPrec (showsPrecToShowbPrec sp)
                                             (showsToShowb         sl))
                              p . fromTextShow1
 
@@ -334,43 +269,26 @@
 -- /Since: 3/
 newtype FromStringShow2 f a b = FromStringShow2 { fromStringShow2 :: f a b }
   deriving ( Eq
-           , Ord
-           , Generic
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
-           , Generic1
-#endif
-#if __GLASGOW_HASKELL__ >= 800
            , Data
            , Foldable
            , Functor
+           , Generic
+           , Generic1
            , Lift
+           , Ord
            , Traversable
-#endif
            )
 
-#if __GLASGOW_HASKELL__ < 800
-deriving instance Functor     (f a) => Functor     (FromStringShow2 f a)
-deriving instance Foldable    (f a) => Foldable    (FromStringShow2 f a)
-deriving instance Traversable (f a) => Traversable (FromStringShow2 f a)
-deriving instance Typeable FromStringShow2
-deriving instance ( Data (f a b), Typeable f, Typeable a, Typeable b
-                  ) => Data (FromStringShow2 f (a :: *) (b :: *))
-#endif
-
 instance Read (f a b) => Read (FromStringShow2 f a b) where
     readPrec     = coerce (readPrec     :: ReadPrec (f a b))
     readsPrec    = coerce (readsPrec    :: Int -> ReadS (f a b))
     readList     = coerce (readList     :: ReadS [f a b])
     readListPrec = coerce (readListPrec :: ReadPrec [f a b])
 
-#if defined(NEW_FUNCTOR_CLASSES)
 -- TODO: Manually implement this when you can derive Show2 (someday)
--- | Not available if using @transformers-0.4@
 deriving instance Show2 f => Show2 (FromStringShow2 f)
 
--- | Not available if using @transformers-0.4@
---
--- This instance is somewhat strange, as its instance context mixes a
+-- | This instance is somewhat strange, as its instance context mixes a
 -- 'Show2' constraint with 'TextShow' constraints. This is done for consistency
 -- with the 'Show' instance for 'FromTextShow2', which mixes constraints in a
 -- similar way to satisfy superclass constraints. See the Haddocks on the
@@ -378,9 +296,7 @@
 instance (Show2 f, TextShow a, TextShow b) => TextShow (FromStringShow2 f a b) where
     showbPrec = showbPrec2
 
--- | Not available if using @transformers-0.4@
---
--- This instance is somewhat strange, as its instance context mixes a
+-- | This instance is somewhat strange, as its instance context mixes a
 -- 'Show2' constraint with a 'TextShow' constraint. This is done for
 -- consistency with the 'Show1' instance for 'FromTextShow2', which mixes
 -- constraints in a similar way to satisfy superclass constraints. See the
@@ -389,7 +305,6 @@
     liftShowbPrec = liftShowbPrec2 showbPrec showbList
     liftShowbList = liftShowbList2 showbPrec showbList
 
--- | Not available if using @transformers-0.4@
 instance Show2 f => TextShow2 (FromStringShow2 f) where
     liftShowbPrec2 sp1 sl1 sp2 sl2 p =
         showsPrecToShowbPrec (liftShowsPrec2 (showbPrecToShowsPrec sp1)
@@ -407,16 +322,13 @@
         coerceList :: [FromStringShow2 f a b] -> [f a b]
         coerceList = coerce
 
--- | Not available if using @transformers-0.4@
 instance (Show2 f, Show a, Show b) => Show (FromStringShow2 f a b) where
     showsPrec = showsPrec2
     showList  = liftShowList2 showsPrec showList showsPrec showList
 
--- | Not available if using @transformers-0.4@
 instance (Show2 f, Show a) => Show1 (FromStringShow2 f a) where
     liftShowsPrec = liftShowsPrec2 showsPrec showList
     liftShowList  = liftShowList2  showsPrec showList
-#endif
 
 -------------------------------------------------------------------------------
 
@@ -436,41 +348,24 @@
 -- /Since: 3/
 newtype FromTextShow2 f a b = FromTextShow2 { fromTextShow2 :: f a b }
   deriving ( Eq
-           , Ord
-           , Generic
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
-           , Generic1
-#endif
-#if __GLASGOW_HASKELL__ >= 800
            , Data
+           , Ord
            , Foldable
            , Functor
+           , Generic
+           , Generic1
            , Lift
            , TextShow2
            , Traversable
-#endif
            )
 
-#if __GLASGOW_HASKELL__ < 800
-deriving instance TextShow2    f    => TextShow2   (FromTextShow2 f)
-deriving instance Functor     (f a) => Functor     (FromTextShow2 f a)
-deriving instance Foldable    (f a) => Foldable    (FromTextShow2 f a)
-deriving instance Traversable (f a) => Traversable (FromTextShow2 f a)
-deriving instance Typeable FromTextShow2
-deriving instance ( Data (f a b), Typeable f, Typeable a, Typeable b
-                  ) => Data (FromTextShow2 f (a :: *) (b :: *))
-#endif
-
 instance Read (f a b) => Read (FromTextShow2 f a b) where
     readPrec     = coerce (readPrec     :: ReadPrec (f a b))
     readsPrec    = coerce (readsPrec    :: Int -> ReadS (f a b))
     readList     = coerce (readList     :: ReadS [f a b])
     readListPrec = coerce (readListPrec :: ReadPrec [f a b])
 
-#if defined(NEW_FUNCTOR_CLASSES)
--- | Not available if using @transformers-0.4@
---
--- This instance is somewhat strange, as its instance context mixes a
+-- | This instance is somewhat strange, as its instance context mixes a
 -- 'TextShow2' constraint with 'Show' constraints. The 'Show' constraints are
 -- necessary to satisfy the quantified 'Show' superclass in 'Show2'. Really,
 -- the 'Show' constraints ought to be 'TextShow' constraints instead, but GHC
@@ -483,9 +378,7 @@
 instance (TextShow2 f, Show a, Show b) => Show (FromTextShow2 f a b) where
   showsPrec = showsPrec2
 
--- | Not available if using @transformers-0.4@
---
--- This instance is somewhat strange, as its instance context mixes a
+-- | This instance is somewhat strange, as its instance context mixes a
 -- 'TextShow2' constraint with a 'Show' constraint. The 'Show' constraint is
 -- necessary to satisfy the quantified 'Show' superclass in 'Show2'. Really,
 -- the 'Show' constraint ought to be a 'TextShow' constraint instead, but GHC
@@ -499,7 +392,6 @@
     liftShowsPrec = liftShowsPrec2 showsPrec showList
     liftShowList = liftShowList2 showsPrec showList
 
--- | Not available if using @transformers-0.4@
 instance TextShow2 f => Show2 (FromTextShow2 f) where
     liftShowsPrec2 sp1 sl1 sp2 sl2 p =
         showbPrecToShowsPrec (liftShowbPrec2 (showsPrecToShowbPrec sp1)
@@ -516,7 +408,6 @@
       where
         coerceList :: [FromTextShow2 f a b] -> [f a b]
         coerceList = coerce
-#endif
 
 instance (TextShow2 f, TextShow a, TextShow b) => TextShow (FromTextShow2 f a b) where
     showbPrec = showbPrec2
@@ -528,53 +419,9 @@
 
 -------------------------------------------------------------------------------
 
-#if !defined(NEW_FUNCTOR_CLASSES)
-liftShowsPrec :: (Show1 f, Show a) => (Int -> a -> ShowS) -> ([a] -> ShowS)
-              -> Int -> f a -> ShowS
-liftShowsPrec _ _ = showsPrec1
-
-liftShowList :: (Show1 f, Show a) => (Int -> a -> ShowS) -> ([a] -> ShowS)
-              -> [f a] -> ShowS
-liftShowList sp' sl' = showListWith (liftShowsPrec sp' sl' 0)
-
-sp :: Int -> a -> ShowS
-sp  = undefined
-
-sl :: [a] -> ShowS
-sl  = undefined
-#endif
-
--------------------------------------------------------------------------------
-
 $(deriveBifunctor     ''FromStringShow2)
 $(deriveBifunctor     ''FromTextShow2)
 $(deriveBifoldable    ''FromStringShow2)
 $(deriveBifoldable    ''FromTextShow2)
 $(deriveBitraversable ''FromStringShow2)
 $(deriveBitraversable ''FromTextShow2)
-
-#if __GLASGOW_HASKELL__ < 800
-$(deriveLift ''FromStringShow)
-$(deriveLift ''FromTextShow)
-
-instance Lift (f a) => Lift (FromStringShow1 f a) where
-    lift = $(makeLift ''FromStringShow1)
-instance Lift (f a) => Lift (FromTextShow1 f a) where
-    lift = $(makeLift ''FromTextShow1)
-
-instance Lift (f a b) => Lift (FromStringShow2 f a b) where
-    lift = $(makeLift ''FromStringShow2)
-instance Lift (f a b) => Lift (FromTextShow2 f a b) where
-    lift = $(makeLift ''FromTextShow2)
-#endif
-
-#if !defined(__LANGUAGE_DERIVE_GENERIC1__)
-$(Generics.deriveMeta           ''FromStringShow1)
-$(Generics.deriveRepresentable1 ''FromStringShow1)
-$(Generics.deriveMeta           ''FromTextShow1)
-$(Generics.deriveRepresentable1 ''FromTextShow1)
-$(Generics.deriveMeta           ''FromStringShow2)
-$(Generics.deriveRepresentable1 ''FromStringShow2)
-$(Generics.deriveMeta           ''FromTextShow2)
-$(Generics.deriveRepresentable1 ''FromTextShow2)
-#endif
diff --git a/src/TextShow/Functions.hs b/src/TextShow/Functions.hs
--- a/src/TextShow/Functions.hs
+++ b/src/TextShow/Functions.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Functions
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/src/TextShow/GHC/Conc/Windows.hs b/src/TextShow/GHC/Conc/Windows.hs
--- a/src/TextShow/GHC/Conc/Windows.hs
+++ b/src/TextShow/GHC/Conc/Windows.hs
@@ -2,7 +2,7 @@
 
 #if !defined(__GHCJS__) && defined(mingw32_HOST_OS)
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 #endif
 {-|
 Module:      TextShow.GHC.Conc.Windows
diff --git a/src/TextShow/GHC/Event.hs b/src/TextShow/GHC/Event.hs
--- a/src/TextShow/GHC/Event.hs
+++ b/src/TextShow/GHC/Event.hs
@@ -3,7 +3,7 @@
 #if !defined(__GHCJS__) && !defined(mingw32_HOST_OS)
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE TemplateHaskell   #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 #endif
 {-|
 Module:      TextShow.GHC.Event
@@ -25,7 +25,7 @@
 import Data.Maybe (catMaybes)
 import Data.Text.Lazy.Builder (Builder, singleton)
 
-import GHC.Event (Event, evtRead, evtWrite)
+import GHC.Event (Event, Lifetime, evtRead, evtWrite)
 
 import Language.Haskell.TH.Lib (conT, varE)
 
@@ -39,10 +39,6 @@
 import TextShow.TH.Names (evtCloseValName, eventIsValName,
                           fdKeyTypeName, uniqueTypeName, asInt64ValName)
 
-# if MIN_VERSION_base(4,8,1)
-import GHC.Event (Lifetime)
-# endif
-
 -- | /Since: 2/
 instance TextShow Event where
     showb e = singleton '[' <> mconcat (intersperse "," $ catMaybes
@@ -62,10 +58,6 @@
     showb = showb . $(varE asInt64ValName)
     {-# INLINE showb #-}
 
-# if MIN_VERSION_base(4,8,1)
--- | Only available with @base-4.8.1.0@ or later.
---
--- /Since: 2/
+-- | /Since: 2/
 $(deriveTextShow ''Lifetime)
-# endif
 #endif
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
@@ -1,5 +1,5 @@
 {-# LANGUAGE CPP #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.GHC.Fingerprint
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -14,7 +14,7 @@
 -}
 module TextShow.GHC.Fingerprint () where
 
-import Data.Semigroup.Compat (mtimesDefault)
+import Data.Semigroup (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
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP                  #-}
 {-# LANGUAGE FlexibleContexts     #-}
 {-# LANGUAGE FlexibleInstances    #-}
 {-# LANGUAGE KindSignatures       #-}
@@ -7,7 +6,7 @@
 {-# LANGUAGE TemplateHaskell      #-}
 {-# LANGUAGE TypeOperators        #-}
 {-# LANGUAGE TypeSynonymInstances #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      TextShow.GHC.Generics
@@ -23,7 +22,7 @@
 -}
 module TextShow.GHC.Generics () where
 
-import Generics.Deriving.Base
+import GHC.Generics
 
 import TextShow.Classes (TextShow(..), TextShow1(..), TextShow2(..))
 import TextShow.Data.Char     ()
@@ -118,22 +117,9 @@
 $(deriveTextShow ''Associativity)
 -- | /Since: 2/
 $(deriveTextShow ''Fixity)
-#if MIN_VERSION_base(4,9,0)
--- | Only available with @base-4.9.0.0@ or later.
---
--- /Since: 3/
+-- | /Since: 3/
 $(deriveTextShow ''SourceUnpackedness)
--- | Only available with @base-4.9.0.0@ or later.
---
--- /Since: 3/
+-- | /Since: 3/
 $(deriveTextShow ''SourceStrictness)
--- | Only available with @base-4.9.0.0@ or later.
---
--- /Since: 3/
+-- | /Since: 3/
 $(deriveTextShow ''DecidedStrictness)
-#else
--- | Only available with @base-4.8@ or earlier.
---
--- /Since: 2/
-$(deriveTextShow ''Arity)
-#endif
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
@@ -1,9 +1,6 @@
 {-# LANGUAGE CPP               #-}
-
-#if MIN_VERSION_base(4,8,0)
 {-# LANGUAGE TemplateHaskell   #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-#endif
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.GHC.RTS.Flags
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -13,14 +10,17 @@
 Portability: GHC
 
 'TextShow' instances for data types in the 'GHC.RTS.Flags' module.
-Only provided if using @base-4.8.0.0@ or later.
 
 /Since: 2/
 -}
 module TextShow.GHC.RTS.Flags () where
 
-#if MIN_VERSION_base(4,8,0)
 import GHC.RTS.Flags
+#if MIN_VERSION_base(4,21,0)
+import qualified GHC.IO.SubSystem as SubSystem
+#elif MIN_VERSION_base(4,15,0)
+import qualified GHC.RTS.Flags as SubSystem
+#endif
 
 import TextShow.Data.Bool     ()
 import TextShow.Data.Char     ()
@@ -45,10 +45,14 @@
 $(deriveTextShow ''GCFlags)
 -- | /Since: 2/
 $(deriveTextShow ''ConcFlags)
-# if MIN_VERSION_base(4,15,0)
+#if MIN_VERSION_base(4,15,0)
 -- | /Since: 3.9/
-$(deriveTextShow ''IoSubSystem)
-# endif
+$(deriveTextShow ''SubSystem.IoSubSystem)
+#endif
+#if MIN_VERSION_base(4,21,0)
+-- | /Since: 3.11/
+$(deriveTextShow ''IoManagerFlag)
+#endif
 -- | /Since: 2/
 $(deriveTextShow ''MiscFlags)
 -- | /Since: 2/
@@ -61,18 +65,17 @@
 $(deriveTextShow ''TraceFlags)
 -- | /Since: 2/
 $(deriveTextShow ''TickyFlags)
-# if MIN_VERSION_base(4,10,0)
+#if MIN_VERSION_base(4,10,0)
 -- | Only available with @base-4.10.0.0@ or later.
 --
 -- /Since: 3.3/
 $(deriveTextShow ''ParFlags)
-# endif
-# if MIN_VERSION_base(4,20,0)
+#endif
+#if MIN_VERSION_base(4,20,0)
 -- | Only available with @base-4.20.0.0@ or later.
 --
 -- /Since: 3.10.5/
 $(deriveTextShow ''HpcFlags)
-# endif
+#endif
 -- | /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
@@ -1,9 +1,6 @@
 {-# LANGUAGE CPP             #-}
-
-#if MIN_VERSION_base(4,8,1)
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-#endif
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.GHC.Stack
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -13,21 +10,14 @@
 Portability: GHC
 
 'TextShow' instances for 'CallStack' and 'SrcLoc' values.
-Only provided if using @base-4.8.1.0@ or later.
 
 /Since: 3.0.1/
 -}
 module TextShow.GHC.Stack () where
 
-#if MIN_VERSION_base(4,8,1)
-import GHC.Stack (CallStack)
-# if MIN_VERSION_base(4,9,0)
-import GHC.Stack (SrcLoc, getCallStack)
-import TextShow.Classes (TextShow(..))
-# else
-import GHC.SrcLoc (SrcLoc)
-# endif
+import GHC.Stack (CallStack, SrcLoc, getCallStack)
 
+import TextShow.Classes (TextShow(..))
 import TextShow.Data.Char     ()
 import TextShow.Data.Integral ()
 import TextShow.Data.List     ()
@@ -37,13 +27,7 @@
 -- | /Since: 3.0.1/
 $(deriveTextShow ''SrcLoc)
 
-# if MIN_VERSION_base(4,9,0)
 -- | /Since: 3.0.1/
 instance TextShow CallStack where
     showb = showb . getCallStack
     {-# INLINE showb #-}
-# else
--- | /Since: 3.0.1/
-$(deriveTextShow ''CallStack)
-# endif
-#endif
diff --git a/src/TextShow/GHC/StaticPtr.hs b/src/TextShow/GHC/StaticPtr.hs
--- a/src/TextShow/GHC/StaticPtr.hs
+++ b/src/TextShow/GHC/StaticPtr.hs
@@ -1,9 +1,5 @@
-{-# LANGUAGE CPP             #-}
-
-#if MIN_VERSION_base(4,8,0)
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-#endif
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.GHC.StaticPtr
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -13,13 +9,11 @@
 Portability: GHC
 
 'TextShow' instance for 'StaticPtrInfo'.
-Only provided if using @base-4.8.0.0@ or later.
 
 /Since: 2/
 -}
 module TextShow.GHC.StaticPtr () where
 
-#if MIN_VERSION_base(4,8,0)
 import GHC.StaticPtr (StaticPtrInfo)
 
 import TextShow.Data.Char     ()
@@ -30,4 +24,3 @@
 
 -- | /Since: 2/
 $(deriveTextShow ''StaticPtrInfo)
-#endif
diff --git a/src/TextShow/GHC/Stats.hs b/src/TextShow/GHC/Stats.hs
--- a/src/TextShow/GHC/Stats.hs
+++ b/src/TextShow/GHC/Stats.hs
@@ -2,8 +2,8 @@
 
 #if !(MIN_VERSION_base(4,11,0))
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-deprecations #-}
-{-# OPTIONS_GHC -fno-warn-orphans      #-}
+{-# OPTIONS_GHC -Wno-deprecations #-}
+{-# OPTIONS_GHC -Wno-orphans      #-}
 # if __GLASGOW_HASKELL__ == 800
 -- See Note [Increased simpl-tick-factor on old GHCs] in TextShow.Data.Complex
 {-# OPTIONS_GHC -fsimpl-tick-factor=200 #-}
diff --git a/src/TextShow/GHC/TypeLits.hs b/src/TextShow/GHC/TypeLits.hs
--- a/src/TextShow/GHC/TypeLits.hs
+++ b/src/TextShow/GHC/TypeLits.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE CPP #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.GHC.TypeLits
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/src/TextShow/Generic.hs b/src/TextShow/Generic.hs
--- a/src/TextShow/Generic.hs
+++ b/src/TextShow/Generic.hs
@@ -5,6 +5,7 @@
 {-# LANGUAGE DeriveFoldable        #-}
 {-# LANGUAGE DeriveFunctor         #-}
 {-# LANGUAGE DeriveGeneric         #-}
+{-# LANGUAGE DeriveLift            #-}
 {-# LANGUAGE DeriveTraversable     #-}
 {-# LANGUAGE EmptyCase             #-}
 {-# LANGUAGE EmptyDataDecls        #-}
@@ -23,10 +24,6 @@
 {-# LANGUAGE TypeSynonymInstances  #-}
 {-# LANGUAGE UndecidableInstances  #-}
 
-#if __GLASGOW_HASKELL__ >= 800
-{-# LANGUAGE DeriveLift            #-}
-#endif
-
 #if __GLASGOW_HASKELL__ >= 806
 {-# LANGUAGE QuantifiedConstraints #-}
 #endif
@@ -99,15 +96,12 @@
 import qualified Data.Text.Lazy.Builder as TB (fromString, singleton)
 import           Data.Text.Lazy.Builder (Builder)
 
-import           Generics.Deriving.Base
-#if !defined(__LANGUAGE_DERIVE_GENERIC1__)
-import qualified Generics.Deriving.TH as Generics
-#endif
+import           GHC.Generics
 
 import           GHC.Exts (Char(C#), Double(D#), Float(F#), Int(I#), Word(W#))
 import           GHC.Show (appPrec, appPrec1)
 
-import           Language.Haskell.TH.Lift
+import           Language.Haskell.TH.Syntax (Lift)
 
 import           Prelude ()
 import           Prelude.Compat
@@ -173,10 +167,7 @@
            , Read
            , Show
            , Traversable
-           , Typeable
-#if __GLASGOW_HASKELL__ >= 800
            , Lift
-#endif
            )
 
 -- | /Since: 3.7.4/
@@ -198,18 +189,13 @@
            , Read
            , Show
            , Generic
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
            , Generic1
-#endif
-#if __GLASGOW_HASKELL__ >= 800
            , Lift
-#endif
            )
 
 deriving instance Foldable    f => Foldable    (FromGeneric1 f)
 deriving instance Functor     f => Functor     (FromGeneric1 f)
 deriving instance Traversable f => Traversable (FromGeneric1 f)
-deriving instance Typeable FromGeneric1
 deriving instance ( Data (f a), Typeable f, Typeable a
                   ) => Data (FromGeneric1 f (a :: *))
 
@@ -346,10 +332,7 @@
            , Ord
            , Read
            , Show
-           , Typeable
-#if __GLASGOW_HASKELL__ >= 800
            , Lift
-#endif
            )
 
 {-
@@ -369,23 +352,12 @@
 -}
 
 hashPrec :: Int -> Int
-#if __GLASGOW_HASKELL__ >= 711
 hashPrec = const 0
-#else
-hashPrec = id
-#endif
 
-#if __GLASGOW_HASKELL__ >= 711
 #define HASH_FUNS(text_type,one_hash,two_hash,from_char,from_string) \
 one_hash, two_hash :: text_type; \
 one_hash  = from_char '#';       \
 two_hash  = from_string "##";
-#else
-#define HASH_FUNS(text_type,one_hash,two_hash,from_char,from_string) \
-one_hash, two_hash :: text_type; \
-one_hash  = mempty;              \
-two_hash  = mempty;
-#endif
 
 -- For some mysterious reason, attaching INLINE pragmas to things in this
 -- module causes GHC 8.10's simplifier to absolutely explode in terms of
@@ -418,7 +390,6 @@
 class gtext_show a where {                                                              \
   ; gshow_prec :: Int -> a -> text_type                                                 \
 };                                                                                      \
-deriving instance Typeable gtext_show;                                                  \
                                                                                         \
 instance gtext_show (f p) => gtext_show (D1 d f p) where {                              \
   ; gshow_prec p (M1 x) = gshow_prec p x                                                \
@@ -447,7 +418,6 @@
 class gtext_show_con a where {                                                          \
   ; gshow_prec_con :: ConType -> Int -> a -> text_type                                  \
 };                                                                                      \
-deriving instance Typeable gtext_show_con;                                              \
                                                                                         \
 instance gtext_show_con (U1 p) where {                                                  \
   ; gshow_prec_con _ _ U1 = mempty                                                      \
@@ -510,7 +480,6 @@
   ; glift_show_prec :: (Int -> a -> text_type) -> ([a] -> text_type)                    \
                     -> Int -> f a -> text_type                                          \
 };                                                                                      \
-deriving instance Typeable gtext_show1;                                                 \
                                                                                         \
 instance gtext_show1 f => gtext_show1 (D1 d f) where {                                  \
   ; glift_show_prec sp sl p (M1 x) = glift_show_prec sp sl p x                          \
@@ -540,7 +509,6 @@
   ; glift_show_prec_con :: (Int -> a -> text_type) -> ([a] -> text_type)                \
                         -> ConType -> Int -> f a -> text_type                           \
 };                                                                                      \
-deriving instance Typeable gtext_show_con1;                                             \
                                                                                         \
 instance gtext_show_con1 U1 where {                                                     \
   ; glift_show_prec_con _ _ _ _ U1 = mempty                                             \
@@ -758,16 +726,3 @@
 -------------------------------------------------------------------------------
 
 $(deriveTextShow ''ConType)
-
-#if __GLASGOW_HASKELL__ < 800
-$(deriveLift ''ConType)
-$(deriveLift ''FromGeneric)
-
-instance Lift (f a) => Lift (FromGeneric1 f a) where
-    lift = $(makeLift ''FromGeneric1)
-#endif
-
-#if !defined(__LANGUAGE_DERIVE_GENERIC1__)
-$(Generics.deriveMeta           ''FromGeneric1)
-$(Generics.deriveRepresentable1 ''FromGeneric1)
-#endif
diff --git a/src/TextShow/Instances.hs b/src/TextShow/Instances.hs
--- a/src/TextShow/Instances.hs
+++ b/src/TextShow/Instances.hs
@@ -37,7 +37,6 @@
 import TextShow.Data.List.NonEmpty    ()
 import TextShow.Data.Maybe            ()
 import TextShow.Data.Monoid           ()
-import TextShow.Data.OldTypeable      ()
 import TextShow.Data.Ord              ()
 import TextShow.Data.Proxy            ()
 import TextShow.Data.Ratio            ()
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
@@ -1,8 +1,6 @@
 {-# LANGUAGE CPP       #-}
-#if MIN_VERSION_base(4,8,0)
 {-# LANGUAGE MagicHash #-}
-#endif
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Numeric.Natural
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -21,12 +19,12 @@
 import GHC.Exts (Word(..))
 import GHC.Num (integerFromNatural)
 import GHC.Num.Natural (Natural(..))
-#elif MIN_VERSION_base(4,8,0) && defined(MIN_VERSION_integer_gmp)
+#elif defined(MIN_VERSION_integer_gmp)
 import GHC.Exts (Word(..))
 import GHC.Integer.GMP.Internals (Integer(..))
 import GHC.Natural (Natural(..))
 #else
-import Numeric.Natural.Compat (Natural)
+import Numeric.Natural (Natural)
 #endif
 
 import TextShow.Classes (TextShow(..))
@@ -37,7 +35,7 @@
 #if MIN_VERSION_base(4,15,0)
     showbPrec p (NS w) = showbPrec p (W# w)
     showbPrec p n      = showbPrec p (integerFromNatural n)
-#elif MIN_VERSION_base(4,8,0) && defined(MIN_VERSION_integer_gmp)
+#elif defined(MIN_VERSION_integer_gmp)
     showbPrec _ (NatS# w#)  = showb $ W# w#
     showbPrec p (NatJ# bn)  = showbPrec p $ Jp# bn
 #else
diff --git a/src/TextShow/Options.hs b/src/TextShow/Options.hs
--- a/src/TextShow/Options.hs
+++ b/src/TextShow/Options.hs
@@ -1,12 +1,6 @@
-{-# LANGUAGE CPP                #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE TemplateHaskell    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-#if __GLASGOW_HASKELL__ >= 800
 {-# LANGUAGE DeriveLift         #-}
-#endif
 
 {-|
 Module:      TextShow.Options
@@ -22,12 +16,12 @@
 -}
 module TextShow.Options (Options(..), GenTextMethods(..), defaultOptions) where
 
-import Data.Data (Data, Typeable)
+import Data.Data (Data)
 import Data.Ix (Ix)
 
 import GHC.Generics (Generic)
 
-import Language.Haskell.TH.Lift
+import Language.Haskell.TH.Syntax (Lift)
 
 -- | Options that specify how to derive 'TextShow' instances using Template Haskell.
 --
@@ -50,10 +44,7 @@
              , Ord
              , Read
              , Show
-             , Typeable
-#if __GLASGOW_HASKELL__ >= 800
              , Lift
-#endif
              )
 
 -- | When should Template Haskell generate implementations for the methods of
@@ -73,10 +64,7 @@
            , Ord
            , Read
            , Show
-           , Typeable
-#if __GLASGOW_HASKELL__ >= 800
            , Lift
-#endif
            )
 
 -- | Sensible default 'Options'.
@@ -87,10 +75,3 @@
   Options { genTextMethods    = SometimesTextMethods
           , emptyCaseBehavior = False
           }
-
--------------------------------------------------------------------------------
-
-#if __GLASGOW_HASKELL__ < 800
-$(deriveLift ''Options)
-$(deriveLift ''GenTextMethods)
-#endif
diff --git a/src/TextShow/System/Exit.hs b/src/TextShow/System/Exit.hs
--- a/src/TextShow/System/Exit.hs
+++ b/src/TextShow/System/Exit.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.System.Exit
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/src/TextShow/System/IO.hs b/src/TextShow/System/IO.hs
--- a/src/TextShow/System/IO.hs
+++ b/src/TextShow/System/IO.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE TemplateHaskell   #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.System.IO
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/src/TextShow/System/Posix/Types.hs b/src/TextShow/System/Posix/Types.hs
--- a/src/TextShow/System/Posix/Types.hs
+++ b/src/TextShow/System/Posix/Types.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE CPP                        #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE StandaloneDeriving         #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      TextShow.System.Posix.Types
diff --git a/src/TextShow/TH.hs b/src/TextShow/TH.hs
--- a/src/TextShow/TH.hs
+++ b/src/TextShow/TH.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      TextShow.TH
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
@@ -1,8 +1,8 @@
-{-# LANGUAGE BangPatterns       #-}
-{-# LANGUAGE CPP                #-}
-{-# LANGUAGE MagicHash          #-}
-{-# LANGUAGE NamedFieldPuns     #-}
-{-# LANGUAGE TemplateHaskell    #-}
+{-# LANGUAGE BangPatterns    #-}
+{-# LANGUAGE CPP             #-}
+{-# LANGUAGE MagicHash       #-}
+{-# LANGUAGE NamedFieldPuns  #-}
+{-# LANGUAGE TemplateHaskell #-}
 {-|
 Module:      TextShow.TH.Internal
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -58,9 +58,9 @@
 
 import           Control.Monad (unless, when)
 import qualified Control.Monad as Monad (fail)
-import           Data.Foldable.Compat
-import qualified Data.List.Compat as List
-import           Data.List.NonEmpty.Compat (NonEmpty(..), (<|))
+import           Data.Foldable
+import qualified Data.List as List
+import           Data.List.NonEmpty (NonEmpty(..), (<|))
 import qualified Data.Map as Map (fromList, keys, lookup, singleton)
 import           Data.Map (Map)
 import           Data.Maybe
@@ -718,19 +718,11 @@
         Nothing -> showPrecE `appE` integerE p `appE` tyVarE
 
     showPrimE :: PrimShow -> Q Exp
-    showPrimE PrimShow{ primShowBoxer
-#if __GLASGOW_HASKELL__ >= 800
-                      , primShowPostfixMod, primShowConv
-#endif
-                      }
-#if __GLASGOW_HASKELL__ >= 800
+    showPrimE PrimShow{ primShowBoxer, primShowPostfixMod, primShowConv }
         -- Starting with GHC 8.0, data types containing unlifted types with
         -- derived Show instances show hashed literals with actual hash signs,
         -- and negative hashed literals are not surrounded with parentheses.
       = primShowConv tsFun $ infixApp (primE 0) [| (<>) |] (primShowPostfixMod tsFun)
-#else
-      = primE p
-#endif
       where
         primE :: Int -> Q Exp
         primE prec = showPrecE `appE` integerE prec `appE` primShowBoxer tyVarE
@@ -888,9 +880,7 @@
         Newtype         -> return False
         DataInstance    -> return True
         NewtypeInstance -> return True
-#if MIN_VERSION_th_abstraction(0,5,0)
         Datatype.TypeData -> typeDataError tyConName
-#endif
 
     let remainingTysOrigSubst' :: [Type]
         -- See Note [Kind signatures in derived instances] for an explanation
@@ -909,7 +899,7 @@
 
     -- If the datatype context mentions any of the dropped type variables,
     -- we can't derive an instance, so throw an error.
-    when (any (`predMentionsName` droppedTyVarNames) dataCxt) $
+    when (any (`mentionsName` droppedTyVarNames) dataCxt) $
       datatypeContextError tyConName instanceType
     -- Also ensure the dropped types can be safely eta-reduced. Otherwise,
     -- throw an error.
@@ -1073,7 +1063,6 @@
     n :: Int
     n = fromEnum tsClass
 
-#if MIN_VERSION_th_abstraction(0,5,0)
 -- | We cannot implement class methods at the term level for @type data@
 -- declarations, which only exist at the type level.
 typeDataError :: Name -> Q a
@@ -1082,7 +1071,6 @@
   . showString (nameBase dataName)
   . showString "‘, which is a ‘type data‘ declaration"
   $ ""
-#endif
 
 -------------------------------------------------------------------------------
 -- Expanding type synonyms
@@ -1493,11 +1481,7 @@
 
 -- | Applies a typeclass constraint to a type.
 applyClass :: Name -> Name -> Pred
-#if MIN_VERSION_template_haskell(2,10,0)
 applyClass con t = AppT (ConT con) (VarT t)
-#else
-applyClass con t = ClassP con [VarT t]
-#endif
 
 -- | Checks to see if the last types in a data family instance can be safely eta-
 -- reduced (i.e., dropped), given the other types. This checks for three conditions:
@@ -1558,22 +1542,10 @@
     go tcName = do
       info <- reify tcName
       case info of
-#if MIN_VERSION_template_haskell(2,11,0)
         FamilyI (OpenTypeFamilyD (TypeFamilyHead _ bndrs _ _)) _
           -> withinFirstArgs bndrs
-#else
-        FamilyI (FamilyD TypeFam _ bndrs _) _
-          -> withinFirstArgs bndrs
-#endif
-
-#if MIN_VERSION_template_haskell(2,11,0)
         FamilyI (ClosedTypeFamilyD (TypeFamilyHead _ bndrs _ _) _) _
           -> withinFirstArgs bndrs
-#else
-        FamilyI (ClosedTypeFamilyD _ bndrs _ _) _
-          -> withinFirstArgs bndrs
-#endif
-
         _ -> return False
       where
         withinFirstArgs :: [a] -> Q Bool
@@ -1604,15 +1576,6 @@
     go (VarT n)     names = n `elem` names
     go _            _     = False
 
--- | Does an instance predicate mention any of the Names in the list?
-predMentionsName :: Pred -> [Name] -> Bool
-#if MIN_VERSION_template_haskell(2,10,0)
-predMentionsName = mentionsName
-#else
-predMentionsName (ClassP n tys) names = n `elem` names || any (`mentionsName` names) tys
-predMentionsName (EqualP t1 t2) names = mentionsName t1 names || mentionsName t2 names
-#endif
-
 -- | Construct a type via curried application.
 applyTy :: Type -> [Type] -> Type
 applyTy = foldl' AppT
@@ -1638,10 +1601,8 @@
     go :: Type -> Type -> [Type] -> NonEmpty Type
     go _      (AppT ty1 ty2)     args = go ty1 ty1 (ty2:args)
     go origTy (SigT ty' _)       args = go origTy ty' args
-#if MIN_VERSION_template_haskell(2,11,0)
     go origTy (InfixT ty1 n ty2) args = go origTy (ConT n `AppT` ty1 `AppT` ty2) args
     go origTy (ParensT ty')      args = go origTy ty' args
-#endif
     go origTy _                  args = origTy :| args
 
 -- | Split a type signature by the arrows on its spine. For example, this:
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
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 {-|
 Module:      TextShow.Text.Read
 Copyright:   (C) 2014-2017 Ryan Scott
diff --git a/tests/Derived/DataFamilies.hs b/tests/Derived/DataFamilies.hs
--- a/tests/Derived/DataFamilies.hs
+++ b/tests/Derived/DataFamilies.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP                        #-}
 {-# LANGUAGE DataKinds                  #-}
 {-# LANGUAGE DeriveGeneric              #-}
 {-# LANGUAGE FlexibleInstances          #-}
@@ -9,12 +8,6 @@
 {-# LANGUAGE TemplateHaskell            #-}
 {-# LANGUAGE TypeFamilies               #-}
 
-#if __GLASGOW_HASKELL__ < 710
--- Starting with GHC 7.10, NullaryTypeClasses was deprecated in favor of
--- MultiParamTypeClasses, which is already enabled
-{-# LANGUAGE NullaryTypeClasses         #-}
-#endif
-
 {-|
 Module:      Derived.DataFamilies
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -32,16 +25,7 @@
     , NullaryData(..)
     ) where
 
-#include "generic.h"
-
-#if !defined(__LANGUAGE_DERIVE_GENERIC1__)
-import qualified Generics.Deriving.TH as Generics
-#endif
-
-import           GHC.Generics (Generic)
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
-import           GHC.Generics (Generic1)
-#endif
+import           GHC.Generics (Generic, Generic1)
 
 import           Instances.Utils.GenericArbitrary (genericArbitrary)
 
@@ -50,10 +34,7 @@
 
 import           Test.QuickCheck (Arbitrary(..))
 
-import           Text.Show.Deriving (deriveShow1)
-#if defined(NEW_FUNCTOR_CLASSES)
-import           Text.Show.Deriving (deriveShow2)
-#endif
+import           Text.Show.Deriving (deriveShow1, deriveShow2)
 
 import           TextShow.TH (deriveTextShow, deriveTextShow1, deriveTextShow2)
 
@@ -66,30 +47,19 @@
                                       | NASShow2 d
   deriving ( Show
            , Generic
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
            , Generic1
-#endif
            )
 
 instance (Arbitrary b, Arbitrary c, Arbitrary d) => Arbitrary (NotAllShow Int b c d) where
     arbitrary = genericArbitrary
 
-#if !defined(NEW_FUNCTOR_CLASSES)
 $(deriveShow1 'NASShow1)
-#else
-$(deriveShow1 'NASShow1)
 $(deriveShow2 'NASShow2)
-#endif
 
 $(deriveTextShow  'NASShow1)
 $(deriveTextShow1 'NASShow2)
 $(deriveTextShow2 'NASShow1)
 
-#if !defined(__LANGUAGE_DERIVE_GENERIC1__)
-$(Generics.deriveMeta           'NASShow1)
-$(Generics.deriveRepresentable1 'NASShow2)
-#endif
-
 -------------------------------------------------------------------------------
 
 data family KindDistinguished (x :: k) (y :: *) (z :: *) :: *
@@ -97,17 +67,13 @@
 data instance KindDistinguished (a :: ()) b c = KindDistinguishedUnit b c
   deriving ( Show
            , Generic
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
            , Generic1
-#endif
            )
 
 data instance KindDistinguished (a :: Bool) b c = KindDistinguishedBool b c
   deriving ( Show
            , Generic
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
            , Generic1
-#endif
            )
 
 instance (Arbitrary b, Arbitrary c)
@@ -118,17 +84,11 @@
       => Arbitrary (KindDistinguished (a :: Bool) b c) where
     arbitrary = genericArbitrary
 
-#if !defined(NEW_FUNCTOR_CLASSES)
 $(deriveShow1 'KindDistinguishedUnit)
-
-$(deriveShow1 'KindDistinguishedBool)
-#else
-$(deriveShow1 'KindDistinguishedUnit)
 $(deriveShow2 'KindDistinguishedUnit)
 
 $(deriveShow1 'KindDistinguishedBool)
 $(deriveShow2 'KindDistinguishedBool)
-#endif
 
 $(deriveTextShow  'KindDistinguishedUnit)
 $(deriveTextShow1 'KindDistinguishedUnit)
@@ -137,11 +97,6 @@
 $(deriveTextShow  'KindDistinguishedBool)
 $(deriveTextShow1 'KindDistinguishedBool)
 $(deriveTextShow2 'KindDistinguishedBool)
-
-#if !defined(__LANGUAGE_DERIVE_GENERIC1__)
-$(Generics.deriveAll1 'KindDistinguishedUnit)
-$(Generics.deriveAll1 'KindDistinguishedBool)
-#endif
 
 -------------------------------------------------------------------------------
 
diff --git a/tests/Derived/DatatypeContexts.hs b/tests/Derived/DatatypeContexts.hs
--- a/tests/Derived/DatatypeContexts.hs
+++ b/tests/Derived/DatatypeContexts.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP              #-}
 {-# LANGUAGE DatatypeContexts #-}
 {-# LANGUAGE TemplateHaskell  #-}
 {-# LANGUAGE TypeFamilies     #-}
@@ -17,23 +16,18 @@
 -}
 module Derived.DatatypeContexts (TyCon(..), TyFamily(..)) where
 
-import Data.Functor.Classes (Show1(..))
+import Data.Functor.Classes (Show1(..), Show2(..))
 
 import Prelude ()
 import Prelude.Compat
 
 import Test.QuickCheck (Arbitrary(..))
 
+import Text.Show.Deriving (makeLiftShowsPrec, makeLiftShowsPrec2)
+
 import TextShow (TextShow(..), TextShow1(..), TextShow2(..))
 import TextShow.TH (makeShowbPrec, makeLiftShowbPrec, makeLiftShowbPrec2)
 
-#if defined(NEW_FUNCTOR_CLASSES)
-import Data.Functor.Classes (Show2(..))
-import Text.Show.Deriving (makeLiftShowsPrec, makeLiftShowsPrec2)
-#else
-import Text.Show.Deriving (makeShowsPrec1)
-#endif
-
 -------------------------------------------------------------------------------
 
 data Ord a => TyCon a b c = TyCon a b c
@@ -59,15 +53,9 @@
 $(return [])
 
 instance (Ord a, Show a, Show b) => Show1 (TyCon a b) where
-#if defined(NEW_FUNCTOR_CLASSES)
     liftShowsPrec = $(makeLiftShowsPrec ''TyCon)
-#else
-    showsPrec1 = $(makeShowsPrec1 ''TyCon)
-#endif
-#if defined(NEW_FUNCTOR_CLASSES)
 instance (Ord a, Show a) => Show2 (TyCon a) where
     liftShowsPrec2 = $(makeLiftShowsPrec2 ''TyCon)
-#endif
 
 instance (Ord a, TextShow a, TextShow b, TextShow c) => TextShow (TyCon a b c) where
     showbPrec = $(makeShowbPrec ''TyCon)
@@ -76,16 +64,11 @@
 instance (Ord a, TextShow a) => TextShow2 (TyCon a) where
     liftShowbPrec2 = $(makeLiftShowbPrec2 ''TyCon)
 
-#if !defined(NEW_FUNCTOR_CLASSES)
 instance (Ord a, Show a, Show b) => Show1 (TyFamily a b) where
-    showsPrec1 = $(makeShowsPrec1 'TyFamily)
-#else
-instance (Ord a, Show a, Show b) => Show1 (TyFamily a b) where
     liftShowsPrec = $(makeLiftShowsPrec 'TyFamily)
 
 instance (Ord a, Show a) => Show2 (TyFamily a) where
     liftShowsPrec2 = $(makeLiftShowsPrec2 'TyFamily)
-#endif
 
 instance (Ord a, TextShow a, TextShow b, TextShow c) => TextShow (TyFamily a b c) where
     showbPrec = $(makeShowbPrec 'TyFamily)
diff --git a/tests/Derived/ExistentialQuantification.hs b/tests/Derived/ExistentialQuantification.hs
--- a/tests/Derived/ExistentialQuantification.hs
+++ b/tests/Derived/ExistentialQuantification.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP                       #-}
 {-# LANGUAGE ExistentialQuantification #-}
 {-# LANGUAGE GADTs                     #-}
 {-# LANGUAGE StandaloneDeriving        #-}
@@ -23,10 +22,7 @@
 
 import Test.QuickCheck (Arbitrary(..), Gen, oneof)
 
-import Text.Show.Deriving (deriveShow1)
-#if defined(NEW_FUNCTOR_CLASSES)
-import Text.Show.Deriving (deriveShow2)
-#endif
+import Text.Show.Deriving (deriveShow1, deriveShow2)
 
 import TextShow (TextShow)
 import TextShow.TH (deriveTextShow, deriveTextShow1, deriveTextShow2)
@@ -102,20 +98,14 @@
 -------------------------------------------------------------------------------
 
 $(deriveShow1 ''TyCon)
-#if defined(NEW_FUNCTOR_CLASSES)
 $(deriveShow2 ''TyCon)
-#endif
 
 $(deriveTextShow  ''TyCon)
 $(deriveTextShow1 ''TyCon)
 $(deriveTextShow2 ''TyCon)
 
-#if !defined(NEW_FUNCTOR_CLASSES)
-$(deriveShow1 'TyFamilyClassConstraints)
-#else
 $(deriveShow1 'TyFamilyTypeRefinement1)
 $(deriveShow2 'TyFamilyTypeRefinement1)
-#endif
 
 $(deriveTextShow  'TyFamilyClassConstraints)
 $(deriveTextShow1 'TyFamilyTypeRefinement1)
diff --git a/tests/Derived/Infix.hs b/tests/Derived/Infix.hs
--- a/tests/Derived/Infix.hs
+++ b/tests/Derived/Infix.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP               #-}
-{-# LANGUAGE DataKinds         #-}
 {-# LANGUAGE DeriveGeneric     #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE GADTs             #-}
@@ -23,12 +21,6 @@
     , TyFamilyGADT(..)
     ) where
 
-#include "generic.h"
-
-#if !defined(__LANGUAGE_DERIVE_GENERIC1__)
-import qualified Generics.Deriving.TH as Generics
-#endif
-
 import           GHC.Generics (Generic, Generic1)
 
 import           Instances.Utils.GenericArbitrary (genericArbitrary)
@@ -38,10 +30,7 @@
 
 import           Test.QuickCheck (Arbitrary(..))
 
-import           Text.Show.Deriving (deriveShow1)
-#if defined(NEW_FUNCTOR_CLASSES)
-import           Text.Show.Deriving (deriveShow2)
-#endif
+import           Text.Show.Deriving (deriveShow1, deriveShow2)
 
 import           TextShow.TH (deriveTextShow, deriveTextShow1, deriveTextShow2)
 
@@ -87,9 +76,7 @@
                                 | TyFamilyFakeInfix a b
   deriving ( Show
            , Generic
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
            , Generic1
-#endif
            )
 
 -------------------------------------------------------------------------------
@@ -104,9 +91,7 @@
     (:****) :: { tfg1 :: i, tfg2 :: j }      -> TyFamilyGADT i j
   deriving ( Show
            , Generic
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
            , Generic1
-#endif
            )
 
 -------------------------------------------------------------------------------
@@ -126,11 +111,10 @@
 -------------------------------------------------------------------------------
 
 $(deriveShow1 ''TyConPlain)
-$(deriveShow1 ''TyConGADT)
-#if defined(NEW_FUNCTOR_CLASSES)
 $(deriveShow2 ''TyConPlain)
+
+$(deriveShow1 ''TyConGADT)
 $(deriveShow2 ''TyConGADT)
-#endif
 
 $(deriveTextShow  ''TyConPlain)
 $(deriveTextShow1 ''TyConPlain)
@@ -140,17 +124,11 @@
 $(deriveTextShow1 ''TyConGADT)
 $(deriveTextShow2 ''TyConGADT)
 
-#if !defined(NEW_FUNCTOR_CLASSES)
 $(deriveShow1 '(:#:))
-
-$(deriveShow1 '(:*))
-#else
-$(deriveShow1 '(:#:))
 $(deriveShow2 '(:$:))
 
 $(deriveShow1 '(:*))
 $(deriveShow2 '(:***))
-#endif
 
 $(deriveTextShow  '(:#:))
 $(deriveTextShow1 '(:$:))
@@ -159,10 +137,3 @@
 $(deriveTextShow  '(:*))
 $(deriveTextShow1 '(:***))
 $(deriveTextShow2 '(:****))
-
-#if !defined(__LANGUAGE_DERIVE_GENERIC1__)
-$(Generics.deriveMeta           '(:#:))
-$(Generics.deriveRepresentable1 '(:$:))
-$(Generics.deriveMeta           '(:*))
-$(Generics.deriveRepresentable1 '(:**))
-#endif
diff --git a/tests/Derived/MagicHash.hs b/tests/Derived/MagicHash.hs
--- a/tests/Derived/MagicHash.hs
+++ b/tests/Derived/MagicHash.hs
@@ -22,14 +22,8 @@
 #endif
   ) where
 
-#if __GLASGOW_HASKELL__ < 711
-import qualified Generics.Deriving.TH as Generics
-#endif
-
 import           GHC.Exts
-#if __GLASGOW_HASKELL__ >= 711
 import           GHC.Generics (Generic, Generic1)
-#endif
 
 import           Instances.Utils.GenericArbitrary (genericArbitrary)
 
@@ -38,10 +32,8 @@
 
 import           Test.QuickCheck (Arbitrary(..))
 
-import           Text.Show.Deriving (deriveShow1Options, legacyShowOptions)
-#if defined(NEW_FUNCTOR_CLASSES)
-import           Text.Show.Deriving (deriveShow2Options)
-#endif
+import           Text.Show.Deriving (deriveShow1Options, deriveShow2Options,
+                                     legacyShowOptions)
 
 import           TextShow.TH (deriveTextShow, deriveTextShow1, deriveTextShow2)
 -------------------------------------------------------------------------------
@@ -55,10 +47,8 @@
   , tcChar#   :: Char#
   , tcWord#   :: Word#
 } deriving ( Show
-#if __GLASGOW_HASKELL__ >= 711
            , Generic
            , Generic1
-#endif
            )
 
 #if MIN_VERSION_base(4,13,0)
@@ -89,10 +79,8 @@
   , tfChar#   :: Char#
   , tfWord#   :: Word#
 } deriving ( Show
-#if __GLASGOW_HASKELL__ >= 711
            , Generic
            , Generic1
-#endif
            )
 
 #if MIN_VERSION_base(4,13,0)
@@ -187,32 +175,17 @@
 -------------------------------------------------------------------------------
 
 $(deriveShow1Options legacyShowOptions ''TyCon#)
-#if defined(NEW_FUNCTOR_CLASSES)
-$(deriveShow2Options legacyShowOptions ''TyCon#)
-#endif
 
 $(deriveTextShow  ''TyCon#)
 $(deriveTextShow1 ''TyCon#)
 $(deriveTextShow2 ''TyCon#)
 
-#if __GLASGOW_HASKELL__ < 711
-$(Generics.deriveAll0And1 ''TyCon#)
-#endif
-
-#if !defined(NEW_FUNCTOR_CLASSES)
 $(deriveShow1Options legacyShowOptions 'TyFamily#)
-#else
-$(deriveShow1Options legacyShowOptions 'TyFamily#)
 $(deriveShow2Options legacyShowOptions 'TyFamily#)
-#endif
 
 $(deriveTextShow  'TyFamily#)
 $(deriveTextShow1 'TyFamily#)
 $(deriveTextShow2 'TyFamily#)
-
-#if __GLASGOW_HASKELL__ < 711
-$(Generics.deriveAll0And1 'TyFamily#)
-#endif
 
 #if MIN_VERSION_base(4,13,0)
 $(deriveShow1Options legacyShowOptions ''TyCon'#)
diff --git a/tests/Derived/PolyKinds.hs b/tests/Derived/PolyKinds.hs
--- a/tests/Derived/PolyKinds.hs
+++ b/tests/Derived/PolyKinds.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE DataKinds                  #-}
 {-# LANGUAGE DeriveGeneric              #-}
 {-# LANGUAGE GADTs                      #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
@@ -11,7 +9,7 @@
 {-# LANGUAGE TypeOperators              #-}
 {-# LANGUAGE UndecidableInstances       #-}
 
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Derived.PolyKinds
@@ -32,30 +30,19 @@
     , TyFamilyReallyHighKinds(..)
     ) where
 
-#include "generic.h"
-
-import           Data.Functor.Classes (Show1(..))
+import           Data.Functor.Classes (Show1(..), Show2(..))
 import           Data.Orphans ()
 
-import           Generics.Deriving.Base
-#if !defined(__LANGUAGE_DERIVE_GENERIC1__)
-import qualified Generics.Deriving.TH as Generics
-#endif
+import           GHC.Generics
 
 import           Test.QuickCheck (Arbitrary)
 
-import           Text.Show.Deriving (deriveShow1)
+import           Text.Show.Deriving (deriveShow1, deriveShow2,
+                                     makeLiftShowsPrec, makeLiftShowsPrec2)
 import           TextShow (TextShow(..), TextShow1(..), TextShow2(..))
 import           TextShow.TH (deriveTextShow2, makeShowbPrec,
                               makeLiftShowbPrec, makeLiftShowbPrec2)
 
-#if defined(NEW_FUNCTOR_CLASSES)
-import           Data.Functor.Classes (Show2(..))
-import           Text.Show.Deriving (deriveShow2, makeLiftShowsPrec, makeLiftShowsPrec2)
-#else
-import           Text.Show.Deriving (makeShowsPrec1)
-#endif
-
 -------------------------------------------------------------------------------
 
 -- NB: Don't use k as a type variable here! It'll trigger GHC Trac #12503.
@@ -66,11 +53,9 @@
 deriving instance Arbitrary (f (g (j a) (k a)) (h (j a) (k b))) =>
   Arbitrary (TyConCompose f g h j k a b)
 
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
 deriving instance ( Functor (f (g (j a) (k a)))
                   , Functor (h (j a))
                   ) => Generic1 (TyConCompose f g h j k a)
-#endif
 
 deriving instance Show (f (g (j a) (k a)) (h (j a) (k b))) =>
   Show (TyConCompose f g h j k a b)
@@ -82,9 +67,7 @@
   deriving ( Arbitrary
            , Show
            , Generic
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
            , Generic1
-#endif
            )
 
 -------------------------------------------------------------------------------
@@ -93,9 +76,7 @@
   deriving ( Arbitrary
            , Show
            , Generic
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
            , Generic1
-#endif
            )
 
 -------------------------------------------------------------------------------
@@ -116,11 +97,9 @@
 deriving instance Arbitrary (f (g (j a) (k a)) (h (j a) (k b))) =>
   Arbitrary (TyFamilyCompose f g h j k a b)
 
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
 deriving instance ( Functor (f (g (j a) (k a)))
                   , Functor (h (j a))
                   ) => Generic1 (TyFamilyCompose f g h j k a)
-#endif
 
 deriving instance Show (f (g (j a) (k a)) (h (j a) (k b))) =>
   Show (TyFamilyCompose f g h j k a b)
@@ -134,9 +113,7 @@
   deriving ( Arbitrary
            , Show
            , Generic
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
            , Generic1
-#endif
            )
 
 -------------------------------------------------------------------------------
@@ -154,9 +131,7 @@
   deriving ( Arbitrary
            , Show
            , Generic
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
            , Generic1
-#endif
            )
 
 -------------------------------------------------------------------------------
@@ -165,11 +140,8 @@
 
 -- TODO: Replace these with non-orphan instances
 $(deriveShow1 ''(,,,,))
-#if defined(NEW_FUNCTOR_CLASSES)
 $(deriveShow2 ''(,,,,))
-#endif
 
-#if defined(NEW_FUNCTOR_CLASSES)
 instance (Show1 (f (g (j a) (k a))), Show1 (h (j a)), Show1 k) =>
   Show1 (TyConCompose f g h j k a) where
     liftShowsPrec = $(makeLiftShowsPrec ''TyConCompose)
@@ -186,19 +158,7 @@
     liftShowsPrec = $(makeLiftShowsPrec ''TyConReallyHighKinds)
 instance Show2 (f a b c) => Show2 (TyConReallyHighKinds f a b c) where
     liftShowsPrec2 = $(makeLiftShowsPrec2 ''TyConReallyHighKinds)
-#else
-instance (Functor (f (g (j a) (k a))), Functor (h (j a)),
-          Show1 (f (g (j a) (k a))), Show1 (h (j a)), Show1 k) =>
-  Show1 (TyConCompose f g h j k a) where
-    showsPrec1 = $(makeShowsPrec1 ''TyConCompose)
 
-instance Show1 (TyConProxy (a :: *)) where
-    showsPrec1 = $(makeShowsPrec1 ''TyConProxy)
-
-instance Show1 (f a b c d) => Show1 (TyConReallyHighKinds f a b c d) where
-    showsPrec1 = $(makeShowsPrec1 ''TyConReallyHighKinds)
-#endif
-
 instance TextShow (f (g (j a) (k a)) (h (j a) (k b))) =>
   TextShow (TyConCompose f g h j k a b) where
     showbPrec = $(makeShowbPrec ''TyConCompose)
@@ -220,33 +180,6 @@
 instance TextShow2 (f a b c) => TextShow2 (TyConReallyHighKinds f a b c) where
     liftShowbPrec2 = $(makeLiftShowbPrec2 ''TyConReallyHighKinds)
 
-#if !defined(__LANGUAGE_DERIVE_GENERIC1__)
-$(Generics.deriveMeta              ''TyConCompose)
-$(Generics.deriveRep1Options False ''TyConCompose)
-
-instance ( Functor (f (g (j a) (k a)))
-         , Functor (h (j a))
-         ) => Generic1 (TyConCompose f g h j k a) where
-    type Rep1 (TyConCompose f g h j k a) = $(Generics.makeRep1 ''TyConCompose) f g h j k a
-    from1 = $(Generics.makeFrom1 ''TyConCompose)
-    to1   = $(Generics.makeTo1   ''TyConCompose)
-
-$(Generics.deriveMeta           ''TyConProxy)
-$(Generics.deriveRepresentable1 ''TyConProxy)
-$(Generics.deriveMeta           ''TyConReallyHighKinds)
-$(Generics.deriveRepresentable1 ''TyConReallyHighKinds)
-#endif
-
-#if !defined(NEW_FUNCTOR_CLASSES)
-instance (Functor (f (g (j a) (k a))), Functor (h (j a)),
-          Show1 (f (g (j a) (k a))), Show1 (h (j a)), Show1 k) =>
-  Show1 (TyFamilyCompose f g h j k a) where
-    showsPrec1 = $(makeShowsPrec1 'TyFamilyCompose)
-instance Show1 (TyFamilyProxy (a :: *)) where
-    showsPrec1 = $(makeShowsPrec1 'TyFamilyProxy)
-instance Show1 (f a b c d) => Show1 (TyFamilyReallyHighKinds f a b c d) where
-    showsPrec1 = $(makeShowsPrec1 'TyFamilyReallyHighKinds)
-#else
 instance (Show1 (f (g (j a) (k a))), Show1 (h (j a)), Show1 k) =>
   Show1 (TyFamilyCompose f g h j k a) where
     liftShowsPrec = $(makeLiftShowsPrec 'TyFamilyCompose)
@@ -262,7 +195,6 @@
     liftShowsPrec2 = $(makeLiftShowsPrec2 'TyFamilyProxy)
 instance Show2 (f a b c) => Show2 (TyFamilyReallyHighKinds f a b c) where
     liftShowsPrec2 = $(makeLiftShowsPrec2 'TyFamilyReallyHighKinds)
-#endif
 
 instance TextShow (f (g (j a) (k a)) (h (j a) (k b))) =>
   TextShow (TyFamilyCompose f g h j k a b) where
@@ -284,20 +216,3 @@
     liftShowbPrec = $(makeLiftShowbPrec 'TyFamilyReallyHighKinds)
 instance TextShow2 (f a b c) => TextShow2 (TyFamilyReallyHighKinds f a b c) where
     liftShowbPrec2 = $(makeLiftShowbPrec2 'TyFamilyReallyHighKinds)
-
-#if !defined(__LANGUAGE_DERIVE_GENERIC1__)
-$(Generics.deriveMeta              'TyFamilyCompose)
-$(Generics.deriveRep1Options False 'TyFamilyCompose)
-
-instance ( Functor (f (g (j a) (k a)))
-         , Functor (h (j a))
-         ) => Generic1 (TyFamilyCompose f g h j k a) where
-    type Rep1 (TyFamilyCompose f g h j k a) = $(Generics.makeRep1 'TyFamilyCompose) f g h j k a
-    from1 = $(Generics.makeFrom1 'TyFamilyCompose)
-    to1   = $(Generics.makeTo1   'TyFamilyCompose)
-
-$(Generics.deriveMeta           'TyFamilyProxy)
-$(Generics.deriveRepresentable1 'TyFamilyProxy)
-$(Generics.deriveMeta           'TyFamilyReallyHighKinds)
-$(Generics.deriveRepresentable1 'TyFamilyReallyHighKinds)
-#endif
diff --git a/tests/Derived/RankNTypes.hs b/tests/Derived/RankNTypes.hs
--- a/tests/Derived/RankNTypes.hs
+++ b/tests/Derived/RankNTypes.hs
@@ -1,12 +1,11 @@
-{-# LANGUAGE CPP                #-}
 {-# LANGUAGE FlexibleInstances  #-}
 {-# LANGUAGE OverloadedStrings  #-}
 {-# LANGUAGE RankNTypes         #-}
 {-# LANGUAGE StandaloneDeriving #-}
 {-# LANGUAGE TemplateHaskell    #-}
 {-# LANGUAGE TypeFamilies       #-}
-{-# OPTIONS_GHC -fno-warn-orphans        #-}
-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+{-# OPTIONS_GHC -Wno-orphans        #-}
+{-# OPTIONS_GHC -Wno-name-shadowing #-}
 
 {-|
 Module:      Derived.RankNTypes
@@ -20,25 +19,19 @@
 -}
 module Derived.RankNTypes (TyCon(..), TyFamily(..)) where
 
-import Data.Functor.Classes (Show1(..))
+import Data.Functor.Classes (Show1(..), Show2(..))
 
 import Prelude ()
 import Prelude.Compat
 
 import Test.QuickCheck (Arbitrary(..))
 
-import Text.Show.Deriving (deriveShow1)
+import Text.Show.Deriving (deriveShow1, deriveShow2,
+                           makeLiftShowsPrec, makeLiftShowsPrec2)
 import TextShow (TextShow(..), TextShow1(..), TextShow2(..))
 import TextShow.TH (deriveTextShow, deriveTextShow1, deriveTextShow2,
                     makeShowbPrec, makeLiftShowbPrec, makeLiftShowbPrec2)
 
-#if defined(NEW_FUNCTOR_CLASSES)
-import Data.Functor.Classes (Show2(..))
-import Text.Show.Deriving (deriveShow2, makeLiftShowsPrec, makeLiftShowsPrec2)
-#else
-import Text.Show.Deriving (makeShowsPrec1)
-#endif
-
 -------------------------------------------------------------------------------
 
 data TyCon a b = TyCon (forall a. Tagged2 a Int b)
@@ -86,31 +79,19 @@
 -------------------------------------------------------------------------------
 
 instance Show1 (Tagged2 s t) where
-#if defined(NEW_FUNCTOR_CLASSES)
     liftShowsPrec = $(makeLiftShowsPrec ''Tagged2)
-#else
-    showsPrec1 = $(makeShowsPrec1 ''Tagged2)
-#endif
-#if defined(NEW_FUNCTOR_CLASSES)
 instance Show2 (Tagged2 s) where
     liftShowsPrec2 = $(makeLiftShowsPrec2 ''Tagged2)
-#endif
 
 $(deriveShow1 ''TyCon)
-#if defined(NEW_FUNCTOR_CLASSES)
 $(deriveShow2 ''TyCon)
-#endif
 
 $(deriveTextShow  ''TyCon)
 $(deriveTextShow1 ''TyCon)
 $(deriveTextShow2 ''TyCon)
 
-#if !defined(NEW_FUNCTOR_CLASSES)
 $(deriveShow1 'TyFamily)
-#else
-$(deriveShow1 'TyFamily)
 $(deriveShow2 'TyFamily)
-#endif
 
 $(deriveTextShow  'TyFamily)
 $(deriveTextShow1 'TyFamily)
diff --git a/tests/Derived/Records.hs b/tests/Derived/Records.hs
--- a/tests/Derived/Records.hs
+++ b/tests/Derived/Records.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP             #-}
-{-# LANGUAGE DataKinds       #-}
 {-# LANGUAGE DeriveGeneric   #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE TypeFamilies    #-}
@@ -16,12 +14,6 @@
 -}
 module Derived.Records (TyCon(..), TyFamily(..)) where
 
-#include "generic.h"
-
-#if !defined(__LANGUAGE_DERIVE_GENERIC1__)
-import qualified Generics.Deriving.TH as Generics
-#endif
-
 import           GHC.Generics (Generic, Generic1)
 
 import           Instances.Utils.GenericArbitrary (genericArbitrary)
@@ -31,10 +23,7 @@
 
 import           Test.QuickCheck (Arbitrary(..))
 
-import           Text.Show.Deriving (deriveShow1)
-#if defined(NEW_FUNCTOR_CLASSES)
-import           Text.Show.Deriving (deriveShow2)
-#endif
+import           Text.Show.Deriving (deriveShow1, deriveShow2)
 
 import           TextShow.TH (deriveTextShow, deriveTextShow1, deriveTextShow2)
 
@@ -57,9 +46,7 @@
                            | (:!:)          { tf3 :: b, (###) :: a }
   deriving ( Show
            , Generic
-#if defined(__LANGUAGE_DERIVE_GENERIC1__)
            , Generic1
-#endif
            )
 
 -------------------------------------------------------------------------------
@@ -73,26 +60,15 @@
 -------------------------------------------------------------------------------
 
 $(deriveShow1 ''TyCon)
-#if defined(NEW_FUNCTOR_CLASSES)
 $(deriveShow2 ''TyCon)
-#endif
 
 $(deriveTextShow  ''TyCon)
 $(deriveTextShow1 ''TyCon)
 $(deriveTextShow2 ''TyCon)
 
-#if !defined(NEW_FUNCTOR_CLASSES)
 $(deriveShow1 'TyFamilyPrefix)
-#else
-$(deriveShow1 'TyFamilyPrefix)
 $(deriveShow2 '(:!:))
-#endif
 
 $(deriveTextShow  'TyFamilyPrefix)
 $(deriveTextShow1 '(:!:))
 $(deriveTextShow2 'TyFamilyPrefix)
-
-#if !defined(__LANGUAGE_DERIVE_GENERIC1__)
-$(Generics.deriveMeta           'TyFamilyPrefix)
-$(Generics.deriveRepresentable1 '(:!:))
-#endif
diff --git a/tests/Derived/TypeFamilies.hs b/tests/Derived/TypeFamilies.hs
--- a/tests/Derived/TypeFamilies.hs
+++ b/tests/Derived/TypeFamilies.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP                        #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE TemplateHaskell            #-}
 {-# LANGUAGE TypeFamilies               #-}
@@ -20,10 +19,7 @@
 
 import Test.QuickCheck (Arbitrary)
 
-import Text.Show.Deriving (deriveShow1)
-#if defined(NEW_FUNCTOR_CLASSES)
-import Text.Show.Deriving (deriveShow2)
-#endif
+import Text.Show.Deriving (deriveShow1, deriveShow2)
 
 import TextShow.TH (deriveTextShow, deriveTextShow1, deriveTextShow2)
 
@@ -42,11 +38,10 @@
 -------------------------------------------------------------------------------
 
 $(deriveShow1 ''TyConOverSat)
-$(deriveShow1 'TyFamilyOverSat)
-#if defined(NEW_FUNCTOR_CLASSES)
 $(deriveShow2 ''TyConOverSat)
+
+$(deriveShow1 'TyFamilyOverSat)
 $(deriveShow2 'TyFamilyOverSat)
-#endif
 
 $(deriveTextShow  ''TyConOverSat)
 $(deriveTextShow1 ''TyConOverSat)
diff --git a/tests/Derived/TypeSynonyms.hs b/tests/Derived/TypeSynonyms.hs
--- a/tests/Derived/TypeSynonyms.hs
+++ b/tests/Derived/TypeSynonyms.hs
@@ -1,10 +1,8 @@
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE DataKinds                  #-}
 {-# LANGUAGE DeriveGeneric              #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE TemplateHaskell            #-}
 {-# LANGUAGE TypeFamilies               #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Derived.TypeSynonyms
@@ -22,18 +20,13 @@
 
 import           Data.Orphans ()
 
-import qualified Generics.Deriving.TH as Generics
-
-import           GHC.Generics (Generic)
+import           GHC.Generics (Generic, Generic1)
 
 import           Prelude
 
 import           Test.QuickCheck (Arbitrary)
 
-import           Text.Show.Deriving (deriveShow1)
-#if defined(NEW_FUNCTOR_CLASSES)
-import           Text.Show.Deriving (deriveShow2)
-#endif
+import           Text.Show.Deriving (deriveShow1, deriveShow2)
 
 import           TextShow.TH (deriveTextShow, deriveTextShow1, deriveTextShow2)
 
@@ -54,6 +47,7 @@
   deriving ( Arbitrary
            , Show
            , Generic
+           , Generic1
            )
 
 -------------------------------------------------------------------------------
@@ -69,43 +63,21 @@
   deriving ( Arbitrary
            , Show
            , Generic
+           , Generic1
            )
 
 -------------------------------------------------------------------------------
 
-#if !(MIN_VERSION_base(4,9,0))
--- TODO: Delete this code once we depend on transformers-compat-0.7.1 as the
--- minimum
-# if !(MIN_VERSION_transformers_compat(0,7,1))
-$(deriveShow1 ''(,,,))
-#  if defined(NEW_FUNCTOR_CLASSES)
-$(deriveShow2 ''(,,,))
-#  endif
-# endif
-#endif
-
 $(deriveShow1 ''TyCon)
-#if defined(NEW_FUNCTOR_CLASSES)
 $(deriveShow2 ''TyCon)
-#endif
 
 $(deriveTextShow  ''TyCon)
 $(deriveTextShow1 ''TyCon)
 $(deriveTextShow2 ''TyCon)
 
-$(Generics.deriveMeta           ''TyCon)
-$(Generics.deriveRepresentable1 ''TyCon)
-
-#if !defined(NEW_FUNCTOR_CLASSES)
 $(deriveShow1 'TyFamily)
-#else
-$(deriveShow1 'TyFamily)
 $(deriveShow2 'TyFamily)
-#endif
 
 $(deriveTextShow  'TyFamily)
 $(deriveTextShow1 'TyFamily)
 $(deriveTextShow2 'TyFamily)
-
-$(Generics.deriveMeta           'TyFamily)
-$(Generics.deriveRepresentable1 'TyFamily)
diff --git a/tests/Instances/Control/Concurrent.hs b/tests/Instances/Control/Concurrent.hs
--- a/tests/Instances/Control/Concurrent.hs
+++ b/tests/Instances/Control/Concurrent.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE StandaloneDeriving #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Control.Concurrent
diff --git a/tests/Instances/Control/Exception.hs b/tests/Instances/Control/Exception.hs
--- a/tests/Instances/Control/Exception.hs
+++ b/tests/Instances/Control/Exception.hs
@@ -2,7 +2,7 @@
 {-# LANGUAGE DeriveGeneric              #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE StandaloneDeriving         #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Control.Exception
@@ -83,16 +83,12 @@
 instance Arbitrary BlockedIndefinitelyOnSTM where
     arbitrary = arbitraryBoundedEnum
 
-#if MIN_VERSION_base(4,8,0)
 deriving instance Bounded AllocationLimitExceeded
 deriving instance Enum AllocationLimitExceeded
 instance Arbitrary AllocationLimitExceeded where
     arbitrary = arbitraryBoundedEnum
-#endif
 
-#if MIN_VERSION_base(4,9,0)
 deriving instance Arbitrary TypeError
-#endif
 
 #if MIN_VERSION_base(4,10,0)
 deriving instance Arbitrary CompactionFailed
diff --git a/tests/Instances/Control/Monad/ST.hs b/tests/Instances/Control/Monad/ST.hs
--- a/tests/Instances/Control/Monad/ST.hs
+++ b/tests/Instances/Control/Monad/ST.hs
@@ -1,4 +1,4 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Control.Monad.ST
diff --git a/tests/Instances/Data/Char.hs b/tests/Instances/Data/Char.hs
--- a/tests/Instances/Data/Char.hs
+++ b/tests/Instances/Data/Char.hs
@@ -1,4 +1,4 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Data.Char
diff --git a/tests/Instances/Data/Data.hs b/tests/Instances/Data/Data.hs
--- a/tests/Instances/Data/Data.hs
+++ b/tests/Instances/Data/Data.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE StandaloneDeriving #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Data.Data
diff --git a/tests/Instances/Data/Dynamic.hs b/tests/Instances/Data/Dynamic.hs
--- a/tests/Instances/Data/Dynamic.hs
+++ b/tests/Instances/Data/Dynamic.hs
@@ -1,4 +1,4 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Data.Dynamic
diff --git a/tests/Instances/Data/Floating.hs b/tests/Instances/Data/Floating.hs
--- a/tests/Instances/Data/Floating.hs
+++ b/tests/Instances/Data/Floating.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE CPP                #-}
 {-# LANGUAGE StandaloneDeriving #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Data.Floating
diff --git a/tests/Instances/Data/Monoid.hs b/tests/Instances/Data/Monoid.hs
--- a/tests/Instances/Data/Monoid.hs
+++ b/tests/Instances/Data/Monoid.hs
@@ -2,7 +2,7 @@
 #if MIN_VERSION_base(4,12,0)
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE StandaloneDeriving #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 #endif
 {-|
 Module:      Instances.Data.Monoid
diff --git a/tests/Instances/Data/OldTypeable.hs b/tests/Instances/Data/OldTypeable.hs
deleted file mode 100644
--- a/tests/Instances/Data/OldTypeable.hs
+++ /dev/null
@@ -1,43 +0,0 @@
-{-# LANGUAGE CPP                #-}
-
-#if !(MIN_VERSION_base(4,8,0))
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE StandaloneDeriving #-}
-{-# OPTIONS_GHC -fno-warn-orphans               #-}
-{-# OPTIONS_GHC -fno-warn-warnings-deprecations #-}
-#endif
-
-{-|
-Module:      Instances.Data.OldTypeable
-Copyright:   (C) 2014-2017 Ryan Scott
-License:     BSD-style (see the file LICENSE)
-Maintainer:  Ryan Scott
-Stability:   Provisional
-Portability: GHC
-
-'Arbitrary' instances for data types in the "Data.OldTypeable" module.
--}
-module Instances.Data.OldTypeable () where
-
-#if !(MIN_VERSION_base(4,8,0))
-import Data.OldTypeable.Internal (TyCon(..), TypeRep(..))
-
-import GHC.Generics (Generic)
-
-import Instances.GHC.Fingerprint ()
-import Instances.Utils ((<@>))
-import Instances.Utils.GenericArbitrary (genericArbitrary)
-
-import Prelude ()
-import Prelude.Compat
-
-import Test.QuickCheck (Arbitrary(..))
-
-instance Arbitrary TypeRep where
-    arbitrary = TypeRep <$> arbitrary <*> arbitrary <@> []
---     arbitrary = TypeRep <$> arbitrary <*> arbitrary <*> arbitrary
-
-deriving instance Generic TyCon
-instance Arbitrary TyCon where
-    arbitrary = genericArbitrary
-#endif
diff --git a/tests/Instances/Data/Ord.hs b/tests/Instances/Data/Ord.hs
--- a/tests/Instances/Data/Ord.hs
+++ b/tests/Instances/Data/Ord.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE StandaloneDeriving         #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Data.Ord
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
@@ -1,4 +1,4 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Data.Semigroup
@@ -12,7 +12,7 @@
 -}
 module Instances.Data.Semigroup () where
 
-import Data.Semigroup.Compat (Arg(..))
+import Data.Semigroup (Arg(..))
 import Instances.Utils.GenericArbitrary (genericArbitrary)
 import Test.QuickCheck (Arbitrary(..))
 
diff --git a/tests/Instances/Data/Text.hs b/tests/Instances/Data/Text.hs
--- a/tests/Instances/Data/Text.hs
+++ b/tests/Instances/Data/Text.hs
@@ -1,8 +1,7 @@
-{-# LANGUAGE CPP                #-}
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE StandaloneDeriving #-}
-{-# OPTIONS_GHC -fno-warn-deprecations #-}
-{-# OPTIONS_GHC -fno-warn-orphans      #-}
+{-# OPTIONS_GHC -Wno-deprecations #-}
+{-# OPTIONS_GHC -Wno-orphans      #-}
 
 {-|
 Module:      Instances.Data.Text
@@ -16,27 +15,20 @@
 -}
 module Instances.Data.Text () where
 
-import Data.Text.Encoding.Error (UnicodeException(..))
-import Data.Text.Lazy.Builder (Builder, fromString)
-
-#if MIN_VERSION_text(1,0,0)
 import Data.Text.Encoding (Decoding(..))
-import Instances.Utils ((<@>))
-#endif
-
-#if MIN_VERSION_text(1,1,0)
+import Data.Text.Encoding.Error (UnicodeException(..))
 import Data.Text.Internal.Fusion.Size (Size, exactSize)
-import Test.QuickCheck (getNonNegative)
-#endif
+import Data.Text.Lazy.Builder (Builder, fromString)
 
 import GHC.Generics (Generic)
 
+import Instances.Utils ((<@>))
 import Instances.Utils.GenericArbitrary (genericArbitrary)
 
 import Prelude ()
 import Prelude.Compat
 
-import Test.QuickCheck (Arbitrary(..))
+import Test.QuickCheck (Arbitrary(..), getNonNegative)
 import Test.QuickCheck.Instances ()
 
 instance Arbitrary Builder where
@@ -45,14 +37,10 @@
 instance Arbitrary UnicodeException where
     arbitrary = genericArbitrary
 
-#if MIN_VERSION_text(1,0,0)
 instance Arbitrary Decoding where
     arbitrary = Some <$> arbitrary <*> arbitrary <@> undefined
-#endif
 
-#if MIN_VERSION_text(1,1,0)
 instance Arbitrary Size where
     arbitrary = exactSize . getNonNegative <$> arbitrary
-#endif
 
 deriving instance Generic UnicodeException
diff --git a/tests/Instances/Data/Tuple.hs b/tests/Instances/Data/Tuple.hs
--- a/tests/Instances/Data/Tuple.hs
+++ b/tests/Instances/Data/Tuple.hs
@@ -1,4 +1,4 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Data.Tuple
diff --git a/tests/Instances/Data/Type/Coercion.hs b/tests/Instances/Data/Type/Coercion.hs
--- a/tests/Instances/Data/Type/Coercion.hs
+++ b/tests/Instances/Data/Type/Coercion.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE PolyKinds #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Data.Type.Coercion
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
@@ -1,8 +1,7 @@
-{-# LANGUAGE CPP           #-}
 {-# LANGUAGE PolyKinds     #-}
 {-# LANGUAGE TypeFamilies  #-}
 {-# LANGUAGE TypeOperators #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Data.Type.Equality
@@ -23,7 +22,5 @@
 instance a ~ b => Arbitrary (a :~: b) where
     arbitrary = arbitraryBoundedEnum
 
-#if MIN_VERSION_base(4,9,0)
 instance a ~~ b => Arbitrary (a :~~: b) where
     arbitrary = arbitraryBoundedEnum
-#endif
diff --git a/tests/Instances/Data/Typeable.hs b/tests/Instances/Data/Typeable.hs
--- a/tests/Instances/Data/Typeable.hs
+++ b/tests/Instances/Data/Typeable.hs
@@ -3,7 +3,7 @@
 {-# LANGUAGE PolyKinds           #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE StandaloneDeriving  #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Data.Typeable
@@ -19,15 +19,11 @@
 
 #include "MachDeps.h"
 
-#if MIN_VERSION_base(4,9,0)
 import GHC.Types (TyCon(..), TrName(..), Module(..))
-# if MIN_VERSION_base(4,17,0) || WORD_SIZE_IN_BITS < 64
+#if MIN_VERSION_base(4,17,0) || WORD_SIZE_IN_BITS < 64
 import GHC.Word (Word64(..))
-# else
-import GHC.Word (Word(..))
-# endif
 #else
-import Data.Typeable.Internal (TyCon(..))
+import GHC.Word (Word(..))
 #endif
 
 #if MIN_VERSION_base(4,10,0)
@@ -105,38 +101,28 @@
 instance Arbitrary TypeRep where
     arbitrary = TypeRep <$> arbitrary
                         <*> arbitrary
-# if MIN_VERSION_base(4,8,0)
                         <@> [] <@> []
-# else
-                        <@> []
-# endif
 #endif
 
 instance Arbitrary TyCon where
-#if MIN_VERSION_base(4,9,0)
     arbitrary = do
-# if MIN_VERSION_base(4,17,0) || WORD_SIZE_IN_BITS < 64
+#if MIN_VERSION_base(4,17,0) || WORD_SIZE_IN_BITS < 64
         W64# w1# <- arbitrary
         W64# w2# <- arbitrary
-# else
+#else
         W#   w1# <- arbitrary
         W#   w2# <- arbitrary
-# endif
-# if MIN_VERSION_base(4,10,0)
+#endif
+#if MIN_VERSION_base(4,10,0)
         I# i# <- arbitrary
         (\a1 a2 a3 -> TyCon w1# w2# a1 a2 i# a3)
             <$> arbitrary <*> arbitrary <*> arbitrary
-# else
-        TyCon w1# w2# <$> arbitrary <*> arbitrary
-# endif
 #else
-    arbitrary = TyCon <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+        TyCon w1# w2# <$> arbitrary <*> arbitrary
 #endif
 
-#if MIN_VERSION_base(4,9,0)
 instance Arbitrary TrName where
     arbitrary = oneof [pure (TrNameS "wat"#), TrNameD <$> arbitrary]
 
 instance Arbitrary Module where
     arbitrary = Module <$> arbitrary <*> arbitrary
-#endif
diff --git a/tests/Instances/Foreign/C/Types.hs b/tests/Instances/Foreign/C/Types.hs
--- a/tests/Instances/Foreign/C/Types.hs
+++ b/tests/Instances/Foreign/C/Types.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE CPP                        #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE StandaloneDeriving         #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Foreign.C.Types
diff --git a/tests/Instances/Foreign/Ptr.hs b/tests/Instances/Foreign/Ptr.hs
--- a/tests/Instances/Foreign/Ptr.hs
+++ b/tests/Instances/Foreign/Ptr.hs
@@ -1,4 +1,4 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Foreign.Ptr
diff --git a/tests/Instances/FromStringTextShow.hs b/tests/Instances/FromStringTextShow.hs
--- a/tests/Instances/FromStringTextShow.hs
+++ b/tests/Instances/FromStringTextShow.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE FlexibleContexts           #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE StandaloneDeriving         #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.FromStringTextShow
diff --git a/tests/Instances/GHC/Conc/Windows.hs b/tests/Instances/GHC/Conc/Windows.hs
--- a/tests/Instances/GHC/Conc/Windows.hs
+++ b/tests/Instances/GHC/Conc/Windows.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE CPP                #-}
 {-# LANGUAGE StandaloneDeriving #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.GHC.Conc.Windows
diff --git a/tests/Instances/GHC/Event.hs b/tests/Instances/GHC/Event.hs
--- a/tests/Instances/GHC/Event.hs
+++ b/tests/Instances/GHC/Event.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE CPP                #-}
 {-# LANGUAGE StandaloneDeriving #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.GHC.Event
@@ -15,27 +15,20 @@
 module Instances.GHC.Event () where
 
 #if !defined(__GHCJS__) && !defined(mingw32_HOST_OS)
-import GHC.Event (Event, evtRead, evtWrite)
+import GHC.Event (Event, Lifetime(..), evtRead, evtWrite)
 
 import Prelude ()
 import Prelude.Compat
 
-import Test.QuickCheck (Arbitrary(..), oneof)
-
-# if MIN_VERSION_base(4,8,1)
-import GHC.Event (Lifetime(..))
-import Test.QuickCheck (arbitraryBoundedEnum)
-# endif
+import Test.QuickCheck (Arbitrary(..), arbitraryBoundedEnum, oneof)
 
 instance Arbitrary Event where
     arbitrary = oneof $ map pure [evtRead, evtWrite]
 
 -- TODO: instance Arbitrary FdKey
 
-# if MIN_VERSION_base(4,8,1)
 deriving instance Bounded Lifetime
 deriving instance Enum Lifetime
 instance Arbitrary Lifetime where
     arbitrary = arbitraryBoundedEnum
-# endif
 #endif
diff --git a/tests/Instances/GHC/Fingerprint.hs b/tests/Instances/GHC/Fingerprint.hs
--- a/tests/Instances/GHC/Fingerprint.hs
+++ b/tests/Instances/GHC/Fingerprint.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE CPP                #-}
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE StandaloneDeriving #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.GHC.Fingerprint
diff --git a/tests/Instances/GHC/Generics.hs b/tests/Instances/GHC/Generics.hs
--- a/tests/Instances/GHC/Generics.hs
+++ b/tests/Instances/GHC/Generics.hs
@@ -1,11 +1,10 @@
-{-# LANGUAGE CPP                        #-}
 {-# LANGUAGE FlexibleContexts           #-}
 {-# LANGUAGE FlexibleInstances          #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE StandaloneDeriving         #-}
 {-# LANGUAGE TypeOperators              #-}
 {-# LANGUAGE TypeSynonymInstances       #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.GHC.Generics
@@ -20,7 +19,7 @@
 module Instances.GHC.Generics () where
 
 import Data.Orphans ()
-import Generics.Deriving.Base
+import GHC.Generics
 import Instances.Utils.GenericArbitrary (genericArbitrary)
 import Test.QuickCheck (Arbitrary(..), arbitraryBoundedEnum)
 
@@ -45,7 +44,6 @@
 instance Arbitrary Associativity where
     arbitrary = arbitraryBoundedEnum
 
-#if MIN_VERSION_base(4,9,0)
 instance Arbitrary SourceUnpackedness where
     arbitrary = arbitraryBoundedEnum
 
@@ -54,10 +52,6 @@
 
 instance Arbitrary DecidedStrictness where
     arbitrary = arbitraryBoundedEnum
-#else
-instance Arbitrary Arity where
-    arbitrary = genericArbitrary
-#endif
 
 instance Arbitrary (UChar p) where
     arbitrary = genericArbitrary
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
@@ -1,16 +1,14 @@
 {-# LANGUAGE CPP                  #-}
-
-#if MIN_VERSION_base(4,8,0)
 {-# LANGUAGE DataKinds            #-}
 {-# LANGUAGE FlexibleInstances    #-}
+{-# LANGUAGE StandaloneDeriving   #-}
 {-# LANGUAGE TemplateHaskell      #-}
 {-# LANGUAGE TypeFamilies         #-}
 {-# LANGUAGE TypeSynonymInstances #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-# if __GLASGOW_HASKELL__ == 802
+{-# OPTIONS_GHC -Wno-orphans #-}
+#if __GLASGOW_HASKELL__ == 802
 -- See Note [Increased simpl-tick-factor on old GHCs] in TextShow.Data.Complex
 {-# OPTIONS_GHC -fsimpl-tick-factor=200 #-}
-# endif
 #endif
 
 {-|
@@ -23,11 +21,8 @@
 
 'Arbitrary' instances for data types in the "GHC.RTS.Flags" module.
 -}
-module Instances.GHC.RTS.Flags (
-#if !(MIN_VERSION_base(4,8,0))
-    ) where
-#else
-      GiveGCStats'
+module Instances.GHC.RTS.Flags
+    ( GiveGCStats'
     , DoCostCentres'
     , DoHeapProfile'
     , DoTrace'
@@ -35,9 +30,17 @@
 
 import qualified Generics.Deriving.TH as Generics (deriveAll0)
 import           GHC.RTS.Flags
+#if MIN_VERSION_base(4,21,0)
+import qualified GHC.IO.SubSystem as SubSystem
+#elif MIN_VERSION_base(4,15,0)
+import qualified GHC.RTS.Flags as SubSystem
+#endif
 import           Instances.Utils.GenericArbitrary (genericArbitrary)
 import           Language.Haskell.TH.Lib (conT)
 import           Test.QuickCheck (Arbitrary(..))
+#if MIN_VERSION_base(4,21,0)
+import           Test.QuickCheck (arbitraryBoundedEnum)
+#endif
 import           TextShow.TH.Names
 
 #if !(MIN_VERSION_base(4,15,0))
@@ -61,7 +64,7 @@
 #endif
 
 #if MIN_VERSION_base(4,15,0)
-$(Generics.deriveAll0 ''IoSubSystem)
+$(Generics.deriveAll0 ''SubSystem.IoSubSystem)
 #endif
 
 instance Arbitrary RTSFlags where
@@ -74,10 +77,16 @@
     arbitrary = genericArbitrary
 
 #if MIN_VERSION_base(4,15,0)
-instance Arbitrary IoSubSystem where
+instance Arbitrary SubSystem.IoSubSystem where
     arbitrary = genericArbitrary
 #endif
 
+#if MIN_VERSION_base(4,21,0)
+deriving instance Bounded IoManagerFlag
+instance Arbitrary IoManagerFlag where
+    arbitrary = arbitraryBoundedEnum
+#endif
+
 instance Arbitrary MiscFlags where
     arbitrary = genericArbitrary
 
@@ -96,15 +105,15 @@
 instance Arbitrary TickyFlags where
     arbitrary = genericArbitrary
 
-# if MIN_VERSION_base(4,10,0)
+#if MIN_VERSION_base(4,10,0)
 instance Arbitrary ParFlags where
     arbitrary = genericArbitrary
-# endif
+#endif
 
-# if MIN_VERSION_base(4,20,0)
+#if MIN_VERSION_base(4,20,0)
 instance Arbitrary HpcFlags where
     arbitrary = genericArbitrary
-# endif
+#endif
 
 type GiveGCStats'   = $(conT giveGCStatsTypeName)
 type DoCostCentres' = $(conT doCostCentresTypeName)
@@ -122,4 +131,3 @@
 
 instance Arbitrary DoTrace' where
     arbitrary = genericArbitrary
-#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
@@ -1,11 +1,7 @@
-{-# LANGUAGE CPP             #-}
-
-#if MIN_VERSION_base(4,8,1)
-{-# LANGUAGE DataKinds       #-}
-{-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE TypeFamilies    #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-#endif
+{-# LANGUAGE CPP                #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.GHC.Stack
@@ -19,41 +15,27 @@
 -}
 module Instances.GHC.Stack () where
 
-#if MIN_VERSION_base(4,8,1)
-# if MIN_VERSION_base(4,9,0)
 import           GHC.Stack.Types (CallStack(..), SrcLoc(..))
 import           Instances.Utils ((<@>))
 import           Test.QuickCheck (oneof)
-# else
-import           GHC.SrcLoc (SrcLoc)
-import           GHC.Stack (CallStack)
-# endif
 
-# if !(MIN_VERSION_base(4,15,0))
-import qualified Generics.Deriving.TH as Generics (deriveAll0)
-# endif
+#if !(MIN_VERSION_base(4,15,0))
+import           GHC.Generics (Generic)
+#endif
 
 import           Instances.Utils.GenericArbitrary (genericArbitrary)
 
 import           Test.QuickCheck (Arbitrary(..))
 
-# if !(MIN_VERSION_base(4,9,0))
-$(Generics.deriveAll0 ''CallStack)
-# endif
-# if !(MIN_VERSION_base(4,15,0))
-$(Generics.deriveAll0 ''SrcLoc)
-# endif
+#if !(MIN_VERSION_base(4,15,0))
+deriving instance Generic SrcLoc
+#endif
 
 instance Arbitrary CallStack where
-# if MIN_VERSION_base(4,9,0)
     arbitrary = oneof [ pure EmptyCallStack
                       , PushCallStack <$> arbitrary <*> arbitrary <@> EmptyCallStack
                       , pure $ FreezeCallStack EmptyCallStack
                       ]
-# else
-    arbitrary = genericArbitrary
-# endif
 
 instance Arbitrary SrcLoc where
     arbitrary = genericArbitrary
-#endif
diff --git a/tests/Instances/GHC/StaticPtr.hs b/tests/Instances/GHC/StaticPtr.hs
--- a/tests/Instances/GHC/StaticPtr.hs
+++ b/tests/Instances/GHC/StaticPtr.hs
@@ -1,10 +1,6 @@
-{-# LANGUAGE CPP                #-}
-
-#if MIN_VERSION_base(4,8,0)
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE StandaloneDeriving #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-#endif
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.GHC.StaticPtr
@@ -18,7 +14,6 @@
 -}
 module Instances.GHC.StaticPtr () where
 
-#if MIN_VERSION_base(4,8,0)
 import GHC.Generics (Generic)
 import GHC.StaticPtr (StaticPtrInfo(..))
 
@@ -29,4 +24,3 @@
 deriving instance Generic StaticPtrInfo
 instance Arbitrary StaticPtrInfo where
     arbitrary = genericArbitrary
-#endif
diff --git a/tests/Instances/GHC/Stats.hs b/tests/Instances/GHC/Stats.hs
--- a/tests/Instances/GHC/Stats.hs
+++ b/tests/Instances/GHC/Stats.hs
@@ -3,8 +3,8 @@
 #if !(MIN_VERSION_base(4,11,0))
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE StandaloneDeriving #-}
-{-# OPTIONS_GHC -fno-warn-deprecations #-}
-{-# OPTIONS_GHC -fno-warn-orphans      #-}
+{-# OPTIONS_GHC -Wno-deprecations #-}
+{-# OPTIONS_GHC -Wno-orphans      #-}
 #endif
 
 {-|
diff --git a/tests/Instances/GHC/TypeLits.hs b/tests/Instances/GHC/TypeLits.hs
--- a/tests/Instances/GHC/TypeLits.hs
+++ b/tests/Instances/GHC/TypeLits.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE PolyKinds #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.GHC.TypeLits
diff --git a/tests/Instances/Generic.hs b/tests/Instances/Generic.hs
--- a/tests/Instances/Generic.hs
+++ b/tests/Instances/Generic.hs
@@ -6,7 +6,7 @@
 #if __GLASGOW_HASKELL__ >= 806
 {-# LANGUAGE DerivingVia        #-}
 #endif
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Generic
diff --git a/tests/Instances/Options.hs b/tests/Instances/Options.hs
--- a/tests/Instances/Options.hs
+++ b/tests/Instances/Options.hs
@@ -1,4 +1,4 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Options
diff --git a/tests/Instances/System/IO.hs b/tests/Instances/System/IO.hs
--- a/tests/Instances/System/IO.hs
+++ b/tests/Instances/System/IO.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE StandaloneDeriving #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.System.IO
diff --git a/tests/Instances/System/Posix/Types.hs b/tests/Instances/System/Posix/Types.hs
--- a/tests/Instances/System/Posix/Types.hs
+++ b/tests/Instances/System/Posix/Types.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE CPP                        #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE StandaloneDeriving         #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.System.Posix.Types
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
@@ -3,7 +3,7 @@
 {-# LANGUAGE TemplateHaskell      #-}
 {-# LANGUAGE TypeFamilies         #-}
 {-# LANGUAGE TypeSynonymInstances #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 {-|
 Module:      Instances.Text.Read
diff --git a/tests/Instances/Utils/GenericArbitrary.hs b/tests/Instances/Utils/GenericArbitrary.hs
--- a/tests/Instances/Utils/GenericArbitrary.hs
+++ b/tests/Instances/Utils/GenericArbitrary.hs
@@ -22,9 +22,8 @@
 -}
 module Instances.Utils.GenericArbitrary (genericArbitrary) where
 
-import Generics.Deriving.Base
-
 import GHC.Exts (Char(..), Double(..), Float(..), Int(..), Word(..))
+import GHC.Generics
 
 import Prelude ()
 import Prelude.Compat
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,9 +14,7 @@
 import Control.Monad.Trans.Instances ()
 
 import Data.Orphans ()
-import Data.Proxy.Compat (Proxy(..))
-
-import Generics.Deriving.Instances ()
+import Data.Proxy (Proxy(..))
 
 import Spec.Utils (matchesTextShowSpec, matchesTextShow1Spec,
                    genericTextShowSpec, genericTextShow1Spec)
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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 import Instances.Control.Exception ()
 import Spec.Utils (matchesTextShowSpec)
 import Test.Hspec (Spec, describe, hspec, parallel)
@@ -48,14 +48,10 @@
         matchesTextShowSpec (Proxy :: Proxy BlockedIndefinitelyOnMVar)
     describe "BlockedIndefinitelyOnSTM" $
         matchesTextShowSpec (Proxy :: Proxy BlockedIndefinitelyOnSTM)
-#if MIN_VERSION_base(4,8,0)
     describe "AllocationLimitExceeded" $
         matchesTextShowSpec (Proxy :: Proxy AllocationLimitExceeded)
-#endif
-#if MIN_VERSION_base(4,9,0)
     describe "TypeError" $
         matchesTextShowSpec (Proxy :: Proxy TypeError)
-#endif
 #if MIN_VERSION_base(4,10,0)
     describe "CompactionFailed" $
         matchesTextShowSpec (Proxy :: Proxy CompactionFailed)
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.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 import Instances.Control.Monad.ST ()
 import Spec.Utils (matchesTextShowSpec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/Data/Array/ByteSpec.hs b/tests/Spec/Data/Array/ByteSpec.hs
--- a/tests/Spec/Data/Array/ByteSpec.hs
+++ b/tests/Spec/Data/Array/ByteSpec.hs
@@ -20,7 +20,7 @@
 
 #if MIN_VERSION_base(4,17,0)
 import Data.Array.Byte (ByteArray)
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 
 import Spec.Utils (matchesTextShowSpec)
 
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
@@ -18,10 +18,10 @@
 import Test.Hspec (Spec, hspec, parallel)
 import Test.QuickCheck.Instances ()
 
-#if !defined(mingw32_HOST_OS) && MIN_VERSION_text(1,0,0)
+#if !defined(mingw32_HOST_OS)
 import Data.Array (Array)
 import Data.Array.Unboxed (UArray)
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 
 import Spec.Utils (matchesTextShowSpec)
 
@@ -33,7 +33,7 @@
 
 spec :: Spec
 spec = parallel $ do
-#if !defined(mingw32_HOST_OS) && MIN_VERSION_text(1,0,0)
+#if !defined(mingw32_HOST_OS)
 -- TODO: Figure out why these tests diverge on Windows
     describe "Array Int Int" $
         matchesTextShowSpec (Proxy :: Proxy (Array Int Int))
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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import           Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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,8 +10,7 @@
 -}
 module Spec.Data.EitherSpec (main, spec) where
 
-import Data.Proxy.Compat (Proxy(..))
-import Generics.Deriving.Instances ()
+import Data.Proxy (Proxy(..))
 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.Compat (Proxy(..))
+import Data.Proxy (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,13 +12,13 @@
 -}
 module Spec.Data.FloatingSpec (main, spec) where
 
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 import Data.Text.Lazy.Builder.RealFloat (FPFormat)
 
 import Instances.Data.Floating ()
 
-import Numeric.Compat (showEFloat, showFFloat, showGFloat,
-                       showFFloatAlt, showGFloatAlt)
+import Numeric (showEFloat, showFFloat, showGFloat,
+                showFFloatAlt, showGFloatAlt)
 
 import Prelude ()
 import Prelude.Compat
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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 import Data.Word (Word8, Word16, Word32, Word64)
 
 import Prelude ()
@@ -23,7 +23,7 @@
 
 import Test.Hspec (Spec, describe, hspec, parallel)
 
-#if !defined(mingw32_HOST_OS) && MIN_VERSION_text(1,0,0)
+#if !defined(mingw32_HOST_OS)
 import Data.Char (intToDigit)
 
 import Numeric (showIntAtBase)
@@ -63,14 +63,14 @@
         matchesTextShowSpec (Proxy :: Proxy Word32)
     describe "Word64" $
         matchesTextShowSpec (Proxy :: Proxy Word64)
-#if !defined(mingw32_HOST_OS) && MIN_VERSION_text(1,0,0)
+#if !defined(mingw32_HOST_OS)
 -- TODO: Figure out why this diverges on Windows
     describe "showbIntAtBase" $
         prop "has the same output as showIntAtBase" prop_showIntAtBase
 #endif
 
 -- | Verifies 'showIntAtBase' and 'showbIntAtBase' generate the same output.
-#if !defined(mingw32_HOST_OS) && MIN_VERSION_text(1,0,0)
+#if !defined(mingw32_HOST_OS)
 prop_showIntAtBase :: Gen Expectation
 prop_showIntAtBase = do
     base <- arbitrary `suchThat` \b -> 1 < b && b <= 16
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.Compat (Proxy(..))
-import Data.List.NonEmpty.Compat (NonEmpty)
+import Data.Proxy (Proxy(..))
+import Data.List.NonEmpty (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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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,9 +13,7 @@
 module Spec.Data.MonoidSpec (main, spec) where
 
 import Data.Monoid
-import Data.Proxy.Compat (Proxy(..))
-
-import Generics.Deriving.Instances ()
+import Data.Proxy (Proxy(..))
 
 import Instances.Data.Monoid ()
 
@@ -68,14 +66,12 @@
         matchesTextShowSpec  p
         genericTextShowSpec  p
         genericTextShow1Spec p
-#if MIN_VERSION_base(4,8,0)
     describe "Alt Maybe Int" $ do
         let p :: Proxy (Alt Maybe Int)
             p = Proxy
         matchesTextShowSpec  p
         genericTextShowSpec  p
         genericTextShow1Spec p
-#endif
 #if MIN_VERSION_base(4,12,0)
     describe "Ap Maybe Int" $ do
         let p :: Proxy (Ap Maybe Int)
diff --git a/tests/Spec/Data/OldTypeableSpec.hs b/tests/Spec/Data/OldTypeableSpec.hs
deleted file mode 100644
--- a/tests/Spec/Data/OldTypeableSpec.hs
+++ /dev/null
@@ -1,47 +0,0 @@
-{-# LANGUAGE CPP #-}
-
-#if !(MIN_VERSION_base(4,8,0))
-{-# OPTIONS_GHC -fno-warn-warnings-deprecations #-}
-#endif
-
-{-|
-Module:      Spec.Data.OldTypeableSpec
-Copyright:   (C) 2014-2017 Ryan Scott
-License:     BSD-style (see the file LICENSE)
-Maintainer:  Ryan Scott
-Stability:   Provisional
-Portability: GHC
-
-@hspec@ tests for data types in the "Data.OldTypeable" module.
--}
-module Spec.Data.OldTypeableSpec (main, spec) where
-
-import Instances.Data.OldTypeable ()
-
-import Prelude ()
-import Prelude.Compat
-
-import Test.Hspec (Spec, hspec, parallel)
-
-#if !(MIN_VERSION_base(4,8,0))
-import Data.OldTypeable (TyCon, TypeRep)
-import Data.Proxy.Compat (Proxy(..))
-
-import Spec.Utils (matchesTextShowSpec)
-
-import Test.Hspec (describe)
-#endif
-
-main :: IO ()
-main = hspec spec
-
-spec :: Spec
-spec = parallel $ do
-#if !(MIN_VERSION_base(4,8,0))
-    describe "TypeRep" $
-        matchesTextShowSpec (Proxy :: Proxy TypeRep)
-    describe "TyCon" $
-        matchesTextShowSpec (Proxy :: Proxy TyCon)
-#else
-    pure ()
-#endif
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,9 +11,7 @@
 module Spec.Data.OrdSpec (main, spec) where
 
 import Data.Orphans ()
-import Data.Proxy.Compat (Proxy(..))
-
-import Generics.Deriving.Instances ()
+import Data.Proxy (Proxy(..))
 
 import GHC.Exts (Down)
 
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,9 +10,7 @@
 -}
 module Spec.Data.ProxySpec (main, spec) where
 
-import Data.Proxy.Compat (Proxy(..))
-
-import Generics.Deriving.Base ()
+import Data.Proxy (Proxy(..))
 
 import Spec.Utils (matchesTextShowSpec, genericTextShowSpec)
 
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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
-import Data.Semigroup.Compat (Min, Max, First, Last, WrappedMonoid, Arg)
+import Data.Proxy (Proxy(..))
+import Data.Semigroup (Min, Max, First, Last, WrappedMonoid, 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
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP #-}
-
 {-|
 Module:      Spec.Data.TextSpec
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -12,7 +10,7 @@
 -}
 module Spec.Data.TextSpec (main, spec) where
 
-import           Data.Proxy.Compat (Proxy(..))
+import           Data.Proxy (Proxy(..))
 
 import           Instances.Data.Text ()
 
@@ -22,13 +20,9 @@
 
 import qualified Data.Text as TS
 import qualified Data.Text as TL
-#if MIN_VERSION_text(1,0,0)
 import           Data.Text.Encoding (Decoding)
-#endif
 import           Data.Text.Encoding.Error (UnicodeException)
-#if MIN_VERSION_text(1,1,0)
 import           Data.Text.Internal.Fusion.Size (Size)
-#endif
 import           Data.Text.Lazy.Builder (Builder)
 
 main :: IO ()
@@ -44,11 +38,7 @@
         matchesTextShowSpec (Proxy :: Proxy TL.Text)
     describe "UnicodeException" $
         matchesTextShowSpec (Proxy :: Proxy UnicodeException)
-#if MIN_VERSION_text(1,0,0)
     describe "Decoding" $
         matchesTextShowSpec (Proxy :: Proxy Decoding)
-#endif
-#if MIN_VERSION_text(1,1,0)
     describe "Size" $
         matchesTextShowSpec (Proxy :: Proxy Size)
-#endif
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
@@ -12,8 +12,7 @@
 -}
 module Spec.Data.TupleSpec (main, spec) where
 
-import Data.Proxy.Compat (Proxy(..))
-import Generics.Deriving.Instances ()
+import Data.Proxy (Proxy(..))
 #if MIN_VERSION_ghc_prim(0,7,0)
 import GHC.Tuple (Solo)
 #endif
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
@@ -13,7 +13,7 @@
 module Spec.Data.Type.CoercionSpec (main, spec) where
 
 import Data.Monoid (All(..))
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 import Data.Type.Coercion (Coercion)
 
 import Instances.Data.Type.Coercion ()
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
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP           #-}
 {-# LANGUAGE TypeOperators #-}
 
 {-|
@@ -13,7 +12,7 @@
 -}
 module Spec.Data.Type.EqualitySpec (main, spec) where
 
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 import Data.Type.Equality.Compat
 
 import Instances.Data.Type.Equality ()
@@ -33,7 +32,5 @@
 spec = parallel $ do
     describe "Int :~: Int" $
         matchesTextShowSpec (Proxy :: Proxy (Int :~: Int))
-# if MIN_VERSION_base(4,9,0)
     describe "Int :~~: Int" $
         matchesTextShowSpec (Proxy :: Proxy (Int :~~: Int))
-# 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
@@ -13,12 +13,10 @@
 -}
 module Spec.Data.TypeableSpec (main, spec) where
 
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 import Data.Typeable (TyCon)
 
-#if MIN_VERSION_base(4,9,0)
 import GHC.Types (TrName, Module)
-#endif
 
 #if MIN_VERSION_base(4,10,0)
 import Data.Kind (Type)
@@ -40,12 +38,10 @@
 spec = parallel $ do
     describe "TyCon" $
         matchesTextShowSpec (Proxy :: Proxy TyCon)
-#if MIN_VERSION_base(4,9,0)
     describe "TrName" $
         matchesTextShowSpec (Proxy :: Proxy TrName)
     describe "Module" $
         matchesTextShowSpec (Proxy :: Proxy Module)
-#endif
 #if MIN_VERSION_base(4,10,0)
     describe "SomeTypeRep" $
         matchesTextShowSpec (Proxy :: Proxy SomeTypeRep)
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.Compat (Proxy(..))
+import Data.Proxy (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
@@ -12,7 +12,7 @@
 -}
 module Spec.Derived.DataFamiliesSpec (main, spec) where
 
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 
 import Derived.DataFamilies (NotAllShow, KindDistinguished, NullaryData)
 
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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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
@@ -17,7 +17,7 @@
 -}
 module Spec.Derived.MagicHashSpec (main, spec) where
 
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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
@@ -16,7 +16,7 @@
 -}
 module Spec.Derived.RecordsSpec (main, spec) where
 
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 import Derived.Records
 import Spec.Utils (matchesTextShow1Spec, genericTextShowSpec, genericTextShow1Spec)
 import Test.Hspec (Spec, describe, hspec, parallel)
diff --git a/tests/Spec/Derived/TypeFamiliesSpec.hs b/tests/Spec/Derived/TypeFamiliesSpec.hs
--- a/tests/Spec/Derived/TypeFamiliesSpec.hs
+++ b/tests/Spec/Derived/TypeFamiliesSpec.hs
@@ -10,7 +10,7 @@
 -}
 module Spec.Derived.TypeFamiliesSpec (main, spec) where
 
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 
 import Derived.TypeFamilies
 
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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP #-}
-
 {-|
 Module:      Spec.FromStringTextShowSpec
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -12,17 +10,14 @@
 -}
 module Spec.FromStringTextShowSpec (main, spec) where
 
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 import Instances.FromStringTextShow ()
-import Spec.Utils (matchesTextShowSpec)
+import Spec.Utils (matchesTextShowSpec, matchesTextShow1Spec,
+                   matchesTextShow2Spec)
 import Test.Hspec (Spec, describe, hspec, parallel)
-import TextShow (FromStringShow(..), FromTextShow(..))
-
-#if defined(NEW_FUNCTOR_CLASSES)
-import Spec.Utils (matchesTextShow1Spec, matchesTextShow2Spec)
-import TextShow (FromStringShow1(..), FromStringShow2(..),
+import TextShow (FromStringShow(..), FromTextShow(..),
+                 FromStringShow1(..), FromStringShow2(..),
                  FromTextShow1(..), FromTextShow2(..))
-#endif
 
 main :: IO ()
 main = hspec spec
@@ -45,7 +40,6 @@
         let p :: Proxy (FromTextShow String)
             p = Proxy
         matchesTextShowSpec  p
-#if defined(NEW_FUNCTOR_CLASSES)
     describe "FromStringShow1 Maybe Int" $ do
         let p :: Proxy (FromStringShow1 Maybe Int)
             p = Proxy
@@ -62,4 +56,3 @@
         let p :: Proxy (FromTextShow2 Either Char Int)
             p = Proxy
         matchesTextShow2Spec p
-#endif
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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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,12 +20,9 @@
 import Test.Hspec (Spec, hspec, parallel)
 
 #if !defined(__GHCJS__) && !defined(mingw32_HOST_OS)
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 
-import GHC.Event (Event)
-# if MIN_VERSION_base(4,8,1)
-import GHC.Event (Lifetime)
-#endif
+import GHC.Event (Event, Lifetime)
 
 import Spec.Utils (matchesTextShowSpec)
 
@@ -43,10 +40,8 @@
         matchesTextShowSpec (Proxy :: Proxy Event)
 --     describe "FdKey" $
 --         matchesTextShowSpec (Proxy :: Proxy FdKey)
-# if MIN_VERSION_base(4,8,1)
     describe "Lifetime" $
         matchesTextShowSpec (Proxy :: Proxy Lifetime)
-# endif
 #else
     pure ()
 #endif
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.Compat (Proxy(..))
+import Data.Proxy (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
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP           #-}
 {-# LANGUAGE DataKinds     #-}
 {-# LANGUAGE TypeOperators #-}
 
@@ -15,18 +14,14 @@
 module Spec.GHC.GenericsSpec (main, spec) where
 
 import Data.Orphans ()
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 
-import Generics.Deriving.Base ( U1, Par1, Rec1, K1, M1, (:+:), (:*:), (:.:)
-                              , UChar, UDouble, UFloat, UInt, UWord
-                              , Fixity, Associativity
-#if MIN_VERSION_base(4,9,0)
-                              , Meta(MetaData), SourceUnpackedness
-                              , SourceStrictness, DecidedStrictness
-#else
-                              , Arity
-#endif
-                              )
+import GHC.Generics ( U1, Par1, Rec1, K1, M1, (:+:), (:*:), (:.:)
+                    , UChar, UDouble, UFloat, UInt, UWord
+                    , Fixity, Associativity
+                    , Meta(MetaData), SourceUnpackedness
+                    , SourceStrictness, DecidedStrictness
+                    )
 
 import Instances.GHC.Generics ()
 
@@ -37,18 +32,11 @@
 main :: IO ()
 main = hspec spec
 
-#if MIN_VERSION_base(4,9,0)
 type MD = 'MetaData "Example" "Module" "package" 'False
 
 m1Description :: String
 m1Description = "M1 () ('MetaData \"Example\" \"Module\" \"package\" 'False) Maybe Int"
-#else
-type MD = ()
 
-m1Description :: String
-m1Description = "M1 () () Maybe Int"
-#endif
-
 spec :: Spec
 spec = parallel $ do
     describe "Fixity" $ do
@@ -61,7 +49,6 @@
             p = Proxy
         matchesTextShowSpec p
         genericTextShowSpec p
-#if MIN_VERSION_base(4,9,0)
     describe "SourceUnpackedness" $ do
         let p :: Proxy SourceUnpackedness
             p = Proxy
@@ -77,13 +64,6 @@
             p = Proxy
         matchesTextShowSpec p
         genericTextShowSpec p
-#else
-    describe "Arity" $ do
-        let p :: Proxy Arity
-            p = Proxy
-        matchesTextShowSpec p
-        genericTextShowSpec p
-#endif
     describe "U1 Int" $ do
         let p :: Proxy (U1 Int)
             p = Proxy
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
@@ -12,35 +12,37 @@
 -}
 module Spec.GHC.RTS.FlagsSpec (main, spec) where
 
-import Prelude ()
-import Prelude.Compat
-
-import Test.Hspec (Spec, hspec, parallel)
+import Data.Proxy (Proxy(..))
 
-#if MIN_VERSION_base(4,8,0)
-import Data.Proxy.Compat (Proxy(..))
 import GHC.RTS.Flags
+
 import Instances.GHC.RTS.Flags
+
+import Prelude ()
+import Prelude.Compat
+
 import Spec.Utils (matchesTextShowSpec)
-import Test.Hspec (describe)
-#endif
 
+import Test.Hspec (Spec, describe, hspec, parallel)
+
 main :: IO ()
 main = hspec spec
 
 spec :: Spec
 spec = parallel $ do
-#if MIN_VERSION_base(4,8,0)
     describe "RTSFlags" $
         matchesTextShowSpec (Proxy :: Proxy RTSFlags)
     describe "GCFlags" $
         matchesTextShowSpec (Proxy :: Proxy GCFlags)
     describe "ConcFlags" $
         matchesTextShowSpec (Proxy :: Proxy ConcFlags)
-# if MIN_VERSION_base(4,15,0)
+#if MIN_VERSION_base(4,21,0)
+    describe "IoManagerFlag" $
+        matchesTextShowSpec (Proxy :: Proxy IoManagerFlag)
+#elif MIN_VERSION_base(4,15,0)
     describe "IoSubSystem" $
         matchesTextShowSpec (Proxy :: Proxy IoSubSystem)
-# endif
+#endif
     describe "MiscFlags" $
         matchesTextShowSpec (Proxy :: Proxy MiscFlags)
     describe "DebugFlags" $
@@ -61,10 +63,7 @@
         matchesTextShowSpec (Proxy :: Proxy DoHeapProfile')
     describe "DoTrace" $
         matchesTextShowSpec (Proxy :: Proxy DoTrace')
-# if MIN_VERSION_base(4,10,0)
+#if MIN_VERSION_base(4,10,0)
     describe "ParFlags" $
         matchesTextShowSpec (Proxy :: Proxy ParFlags)
-# endif
-#else
-    pure ()
 #endif
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
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP #-}
-
 {-|
 Module:      Spec.GHC.StackSpec
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -12,37 +10,25 @@
 -}
 module Spec.GHC.StackSpec (main, spec) where
 
+import Data.Proxy (Proxy(..))
+
+import GHC.Stack (CallStack, SrcLoc)
+
 import Instances.GHC.Stack ()
 
 import Prelude ()
 import Prelude.Compat
 
-import Test.Hspec (Spec, hspec, parallel)
-
-#if MIN_VERSION_base(4,8,1)
-import Data.Proxy.Compat (Proxy(..))
-import GHC.Stack (CallStack)
-# if MIN_VERSION_base(4,9,0)
-import GHC.Stack (SrcLoc)
-# else
-import GHC.SrcLoc (SrcLoc)
-# endif
-
 import Spec.Utils (matchesTextShowSpec)
 
-import Test.Hspec (describe)
-#endif
+import Test.Hspec (Spec, describe, hspec, parallel)
 
 main :: IO ()
 main = hspec spec
 
 spec :: Spec
 spec = parallel $ do
-#if MIN_VERSION_base(4,8,1)
     describe "CallStack" $
         matchesTextShowSpec (Proxy :: Proxy CallStack)
     describe "SrcLoc" $
         matchesTextShowSpec (Proxy :: Proxy SrcLoc)
-#else
-    pure ()
-#endif
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
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP #-}
-
 {-|
 Module:      Spec.GHC.StaticPtrSpec
 Copyright:   (C) 2014-2017 Ryan Scott
@@ -12,28 +10,23 @@
 -}
 module Spec.GHC.StaticPtrSpec (main, spec) where
 
+import Data.Proxy (Proxy(..))
+
+import GHC.StaticPtr (StaticPtrInfo)
+
 import Instances.GHC.StaticPtr ()
 
 import Prelude ()
 import Prelude.Compat
 
-import Test.Hspec (Spec, hspec, parallel)
-
-#if MIN_VERSION_base(4,8,0)
-import Data.Proxy.Compat (Proxy(..))
-import GHC.StaticPtr (StaticPtrInfo)
 import Spec.Utils (matchesTextShowSpec)
-import Test.Hspec (describe)
-#endif
 
+import Test.Hspec (Spec, describe, hspec, parallel)
+
 main :: IO ()
 main = hspec spec
 
 spec :: Spec
 spec = parallel $
-#if MIN_VERSION_base(4,8,0)
     describe "StaticPtrInfo" $
         matchesTextShowSpec (Proxy :: Proxy StaticPtrInfo)
-#else
-    pure ()
-#endif
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
@@ -1,5 +1,5 @@
 {-# LANGUAGE CPP #-}
-{-# OPTIONS_GHC -fno-warn-deprecations #-}
+{-# OPTIONS_GHC -Wno-deprecations #-}
 
 {-|
 Module:      Spec.GHC.StatsSpec
@@ -21,7 +21,7 @@
 import Test.Hspec (Spec, hspec, parallel)
 
 #if !(MIN_VERSION_base(4,11,0))
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (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
@@ -13,7 +13,7 @@
 -}
 module Spec.GHC.TypeLitsSpec (main, spec) where
 
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (Proxy(..))
 
 import GHC.TypeLits
 
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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
-import Numeric.Natural.Compat (Natural)
+import Data.Proxy (Proxy(..))
+import Numeric.Natural (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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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.Compat (Proxy(..))
+import Data.Proxy (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
@@ -10,7 +10,7 @@
 -}
 module Spec.Text.ReadSpec (main, spec) where
 
-import Data.Proxy.Compat (Proxy(..))
+import Data.Proxy (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
@@ -23,9 +23,7 @@
       matchesTextShowSpec
     , prop_matchesTextShow
     , matchesTextShow1Spec
-#if defined(NEW_FUNCTOR_CLASSES)
     , matchesTextShow2Spec
-#endif
     , genericTextShowSpec
     , genericTextShow1Spec
 
@@ -33,23 +31,19 @@
     , GArbitrary(..)
     ) where
 
-import Data.Functor.Classes (Show1, showsPrec1)
-import Data.Proxy.Compat (Proxy(..))
+import Data.Functor.Classes (Show1, Show2, showsPrec1, showsPrec2)
+import Data.Proxy (Proxy(..))
 
-import Generics.Deriving.Base
+import GHC.Generics
 
 import Test.Hspec (Expectation, Spec, shouldBe)
 import Test.Hspec.QuickCheck (prop)
 import Test.QuickCheck (Arbitrary(..), Gen)
 
-import TextShow (TextShow(..), TextShow1(..), showbPrec1, fromString)
+import TextShow (TextShow(..), TextShow1(..), TextShow2(..),
+                 showbPrec1, showbPrec2, fromString)
 import TextShow.Generic
 
-#if defined(NEW_FUNCTOR_CLASSES)
-import Data.Functor.Classes (Show2, showsPrec2)
-import TextShow (TextShow2(..), showbPrec2)
-#endif
-
 #if __GLASGOW_HASKELL__ >= 806
 import GHC.Show (appPrec, appPrec1)
 import TextShow (showbParen, showbSpace)
@@ -78,7 +72,6 @@
 prop_matchesTextShow1 :: (Show1 f, Show a, TextShow1 f, TextShow a) => Int -> f a -> Expectation
 prop_matchesTextShow1 p x = showbPrec1 p x `shouldBe` fromString (showsPrec1 p x "")
 
-#if defined(NEW_FUNCTOR_CLASSES)
 -- | Expect a type's 'Show2' instances to coincide for both 'String's and 'Text',
 -- irrespective of precedence.
 matchesTextShow2Spec :: forall f a b.
@@ -92,7 +85,6 @@
 prop_matchesTextShow2 :: (Show2 f, Show a, Show b, TextShow2 f, TextShow a, TextShow b)
                       => Int -> f a b -> Expectation
 prop_matchesTextShow2 p x = showbPrec2 p x `shouldBe` fromString (showsPrec2 p x "")
-#endif
 
 -- | Expect a type's 'TextShow' instance to coincide with the output produced
 -- by the equivalent 'Generic' functions.
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.10.5
+version:             3.11
 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
@@ -52,9 +52,7 @@
 copyright:           (C) 2014-2017 Ryan Scott
 category:            Text
 build-type:          Simple
-tested-with:         GHC == 7.8.4
-                   , GHC == 7.10.3
-                   , GHC == 8.0.2
+tested-with:         GHC == 8.0.2
                    , GHC == 8.2.2
                    , GHC == 8.4.4
                    , GHC == 8.6.5
@@ -63,31 +61,17 @@
                    , GHC == 9.0.2
                    , GHC == 9.2.8
                    , GHC == 9.4.8
-                   , GHC == 9.6.5
+                   , GHC == 9.6.6
                    , GHC == 9.8.2
                    , GHC == 9.10.1
-extra-source-files:  CHANGELOG.md, README.md, include/*.h
+                   , GHC == 9.12.1
+extra-source-files:  CHANGELOG.md, README.md
 cabal-version:       >=1.10
 
 source-repository head
   type:                git
   location:            https://github.com/RyanGlScott/text-show
 
-flag base-4-9
-  description:         Use base-4.9 or later.
-  default:             True
-
-flag template-haskell-2-11
-  description:         Use template-haskell-2.11.0.0 or later.
-  default:             True
-
-flag new-functor-classes
-  description:         Use a version of transformers or transformers-compat with a
-                       modern-style Data.Functor.Classes module. This flag cannot be
-                       used when building with transformers-0.4, since it comes with
-                       a different version of Data.Functor.Classes.
-  default:             True
-
 flag integer-gmp
   description:         When building with a version of GHC older than 9.0,
                        depend on the @integer-gmp@ library. You can disable
@@ -131,6 +115,8 @@
                        TextShow.Data.Semigroup
                        TextShow.Data.Text
                        TextShow.Data.Tuple
+                       TextShow.Data.Type.Coercion
+                       TextShow.Data.Type.Equality
                        TextShow.Data.Typeable
                        TextShow.Data.Version
                        TextShow.Data.Void
@@ -139,7 +125,11 @@
                        TextShow.Functions
                        TextShow.GHC.Fingerprint
                        TextShow.GHC.Generics
+                       TextShow.GHC.RTS.Flags
+                       TextShow.GHC.Stack
+                       TextShow.GHC.StaticPtr
                        TextShow.GHC.Stats
+                       TextShow.GHC.TypeLits
                        TextShow.Numeric.Natural
                        TextShow.System.Exit
                        TextShow.System.IO
@@ -151,22 +141,6 @@
                        TextShow.GHC.Conc.Windows
                        -- Only exports functions if not using Windows
                        TextShow.GHC.Event
-
-                       -- Only exports functions if base >= 4.6
-                       TextShow.GHC.TypeLits
-
-                       -- Only exports functions if base >= 4.7
-                       TextShow.Data.Type.Coercion
-                       TextShow.Data.Type.Equality
-                       -- Only exports functions if base >= 4.7 && < 4.8
-                       TextShow.Data.OldTypeable
-
-                       -- Only exports functions if base >= 4.8
-                       TextShow.GHC.RTS.Flags
-                       TextShow.GHC.StaticPtr
-
-                       -- Only exports functions if base >= 4.8.1
-                       TextShow.GHC.Stack
   other-modules:       TextShow.Classes
                        TextShow.Data.Typeable.Utils
                        TextShow.FromStringTextShow
@@ -175,36 +149,19 @@
                        TextShow.TH.Internal
                        TextShow.TH.Names
                        TextShow.Utils
-  build-depends:       array                 >= 0.3    && < 0.6
-                     , base-compat-batteries >= 0.11   && < 0.14
-                     , bifunctors            >= 5.1    && < 6
-                     , bytestring            >= 0.9    && < 0.13
-                     , bytestring-builder
-                     , containers            >= 0.1    && < 0.8
-                     , generic-deriving      >= 1.14.1 && < 2
+  build-depends:       array                 >= 0.3      && < 0.6
+                     , base                  >= 4.9      && < 4.22
+                     , base-compat-batteries >= 0.11     && < 0.15
+                     , bifunctors            >= 5.1      && < 6
+                     , bytestring            >= 0.10.8.1 && < 0.13
+                     , containers            >= 0.1      && < 0.8
+                     , ghc-boot-th           >= 8.0      && < 9.13
                      , ghc-prim
-                     , text                  >= 0.11.1 && < 2.2
-                     , th-abstraction        >= 0.4    && < 0.8
-                     , th-lift               >= 0.7.6  && < 1
-
-  if flag(base-4-9)
-    build-depends:     base                  >= 4.9 && < 4.21
-    cpp-options:       "-DNEW_FUNCTOR_CLASSES"
-  else
-    build-depends:     base                  >= 4.7 && < 4.9
-
-  if flag(template-haskell-2-11)
-    build-depends:     template-haskell      >= 2.11 && < 2.23
-                     , ghc-boot-th           >= 8.0  && < 9.11
-  else
-    build-depends:     template-haskell      >= 2.9  && < 2.11
-
-  if flag(new-functor-classes)
-    build-depends:     transformers          (>= 0.2.1 && < 0.4) || (>= 0.5 && < 0.7)
-                     , transformers-compat   >= 0.5 && < 1
-    cpp-options:       "-DNEW_FUNCTOR_CLASSES"
-  else
-    build-depends:     transformers          == 0.4.*
+                     , template-haskell      >= 2.11     && < 2.23
+                     , text                  >= 1.1      && < 2.2
+                     , th-abstraction        >= 0.5      && < 0.8
+                     , transformers          >= 0.5      && < 0.7
+                     , transformers-compat   >= 0.5      && < 1
 
   -- integer-gmp is only needed on pre-9.0 versions of GHC, as GHC 9.0+ add
   -- enough functionality to base to avoid the use of integer-gmp entirely.
@@ -218,8 +175,6 @@
     ghc-options:       -Wno-star-is-type
   if impl(ghc >= 9.0)
     ghc-options:       -fenable-th-splice-warnings
-  include-dirs:        include
-  includes:            generic.h
 
 test-suite spec
   type:                exitcode-stdio-1.0
@@ -247,13 +202,19 @@
                        Instances.Data.Text
                        Instances.Data.Tuple
                        Instances.Data.Typeable
+                       Instances.Data.Type.Coercion
+                       Instances.Data.Type.Equality
                        Instances.Foreign.C.Types
                        Instances.Foreign.Ptr
                        Instances.FromStringTextShow
                        Instances.Generic
                        Instances.GHC.Fingerprint
                        Instances.GHC.Generics
+                       Instances.GHC.RTS.Flags
+                       Instances.GHC.Stack
+                       Instances.GHC.StaticPtr
                        Instances.GHC.Stats
+                       Instances.GHC.TypeLits
                        Instances.Options
                        Instances.System.IO
                        Instances.System.Posix.Types
@@ -266,22 +227,6 @@
                        -- Only exports instances if not using Windows
                        Instances.GHC.Event
 
-                       -- Only exports instances if base >= 4.6
-                       Instances.GHC.TypeLits
-
-                       -- Only exports instances if base >= 4.7
-                       Instances.Data.Type.Coercion
-                       Instances.Data.Type.Equality
-                       -- Only exports instances if base >= 4.7 && < 4.8
-                       Instances.Data.OldTypeable
-
-                       -- Only exports instances if base >= 4.8
-                       Instances.GHC.RTS.Flags
-                       Instances.GHC.StaticPtr
-
-                       -- Only exports instances if base >= 4.9
-                       Instances.GHC.Stack
-
                        -- Only exports instances if base >= 4.12
                        Instances.Data.Monoid
 
@@ -316,6 +261,8 @@
                        Spec.Data.SemigroupSpec
                        Spec.Data.TextSpec
                        Spec.Data.TupleSpec
+                       Spec.Data.Type.CoercionSpec
+                       Spec.Data.Type.EqualitySpec
                        Spec.Data.TypeableSpec
                        Spec.Data.VersionSpec
                        Spec.Derived.DataFamiliesSpec
@@ -335,7 +282,11 @@
                        Spec.GenericSpec
                        Spec.GHC.FingerprintSpec
                        Spec.GHC.GenericsSpec
+                       Spec.GHC.RTS.FlagsSpec
+                       Spec.GHC.StackSpec
+                       Spec.GHC.StaticPtrSpec
                        Spec.GHC.StatsSpec
+                       Spec.GHC.TypeLitsSpec
                        Spec.Numeric.NaturalSpec
                        Spec.OptionsSpec
                        Spec.System.ExitSpec
@@ -349,52 +300,25 @@
                        -- Only exports tests if not using Windows
                        Spec.GHC.EventSpec
 
-                       -- Only exports tests if base >= 4.6
-                       Spec.GHC.TypeLitsSpec
-
-                       -- Only exports tests if base >= 4.7
-                       Spec.Data.Type.CoercionSpec
-                       Spec.Data.Type.EqualitySpec
-                       -- Only exports tests if base >= 4.7 && < 4.8
-                       Spec.Data.OldTypeableSpec
-
-                       -- Only exports tests if base >= 4.8
-                       Spec.GHC.RTS.FlagsSpec
-                       Spec.GHC.StaticPtrSpec
-
-                       -- Only exports tests if base >= 4.9
-                       Spec.GHC.StackSpec
-
                        TextShow.TH.Names
-  build-depends:       array                 >= 0.3    && < 0.6
-                     , base-compat-batteries >= 0.11   && < 0.14
-                     , base-orphans          >= 0.8.5  && < 0.10
-                     , bytestring            >= 0.9    && < 0.13
-                     , bytestring-builder
-                     , deriving-compat       >= 0.6.5  && < 1
-                     , generic-deriving      >= 1.14.1 && < 2
+  build-depends:       array                 >= 0.3      && < 0.6
+                     , base                  >= 4.9      && < 4.22
+                     , base-compat-batteries >= 0.11     && < 0.15
+                     , base-orphans          >= 0.8.5    && < 0.10
+                     , bytestring            >= 0.10.8.1 && < 0.13
+                     , deriving-compat       >= 0.6.5    && < 1
+                     , generic-deriving      >= 1.14.1   && < 2
                      , ghc-prim
-                     , hspec                 >= 2      && < 3
-                     , QuickCheck            >= 2.14.3 && < 2.15
-                     , quickcheck-instances  >= 0.3.28 && < 0.4
-                     , template-haskell      >= 2.9    && < 2.23
-                     , text                  >= 0.11.1 && < 2.2
+                     , hspec                 >= 2        && < 3
+                     , QuickCheck            >= 2.14.3   && < 2.16
+                     , quickcheck-instances  >= 0.3.28   && < 0.4
+                     , template-haskell      >= 2.11     && < 2.23
+                     , text                  >= 1.1      && < 2.2
                      , text-show
-                     , transformers-compat   >= 0.5    && < 1
+                     , transformers          >= 0.5      && < 0.7
+                     , transformers-compat   >= 0.5      && < 1
   build-tool-depends:  hspec-discover:hspec-discover
 
-  if flag(base-4-9)
-    build-depends:     base                  >= 4.9 && < 4.21
-    cpp-options:       "-DNEW_FUNCTOR_CLASSES"
-  else
-    build-depends:     base                  >= 4.7 && < 4.9
-
-  if flag(new-functor-classes)
-    build-depends:     transformers          (>= 0.2.1 && < 0.4) || (>= 0.5 && < 0.7)
-    cpp-options:       "-DNEW_FUNCTOR_CLASSES"
-  else
-    build-depends:     transformers          == 0.4.*
-
   hs-source-dirs:      tests, shared
   default-language:    Haskell2010
   ghc-options:         -Wall -threaded -rtsopts
@@ -402,19 +326,16 @@
     ghc-options:       -Wno-star-is-type
   if impl(ghc >= 9.0)
     ghc-options:       -fenable-th-splice-warnings
-  include-dirs:        include
-  includes:            generic.h
-                     , overlap.h
 
 benchmark bench
   type:                exitcode-stdio-1.0
   main-is:             Bench.hs
-  build-depends:       base      >= 4.5    && < 4.21
+  build-depends:       base      >= 4.9    && < 4.22
                      , criterion >= 1.1.4  && < 2
                      , deepseq   >= 1.3    && < 2
                      , ghc-prim
                      , text-show
-                     , text      >= 0.11.1 && < 2.2
+                     , text      >= 1.1    && < 2.2
 
   hs-source-dirs:      benchmarks
   default-language:    Haskell2010
