diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+## 3.3
+* Add the `TextShow.GHC.LanguageExtensions.Type` and `TextShow.GHC.PackageDb` modules, which define instances if using `ghc-boot`
+* Add `TextShow` instances for `NameFlavour`, `NameSpace`, `PatSynArgs`, and `PatSynDir` in `TextShow.Language.Haskell.TH`
+* Require `text-show-3.3` or later, which has slightly different TH derivation behavior. As a result, the context for the `TextShow1` instance for `Clown` in `TextShow.Data.Bifunctor` had to be changed slightly.
+* Allow building with `QuickCheck-2.9`
+* Fix GHC HEAD build
+
 ### 3.2.1
 * Fix build with GHC 8.0
 * Add `TextShow` instance for `Overlap` in `TextShow.Language.Haskell.TH`
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -21,6 +21,7 @@
 * [`binary`](http://hackage.haskell.org/package/binary)
 * [`containers`](http://hackage.haskell.org/package/containers)
 * [`directory`](http://hackage.haskell.org/package/directory)
+* [`ghc-boot`](http://hackage.haskell.org/package/ghc-boot)
 * [`haskeline`](http://hackage.haskell.org/package/haskeline)
 * [`hoopl`](http://hackage.haskell.org/package/hoopl)
 * [`hpc`](http://hackage.haskell.org/package/hpc)
@@ -28,7 +29,6 @@
 * [`old-time`](http://hackage.haskell.org/package/old-time)
 * [`pretty`](http://hackage.haskell.org/package/pretty)
 * [`random`](http://hackage.haskell.org/package/random)
-* [`semigroups`](http://hackage.haskell.org/package/semigroups)
 * [`tagged`](http://hackage.haskell.org/package/tagged)
 * [`template-haskell`](http://hackage.haskell.org/package/template-haskell)
 * [`terminfo`](http://hackage.haskell.org/package/terminfo)
diff --git a/src/TextShow/Data/Bifunctor.hs b/src/TextShow/Data/Bifunctor.hs
--- a/src/TextShow/Data/Bifunctor.hs
+++ b/src/TextShow/Data/Bifunctor.hs
@@ -229,7 +229,7 @@
 
 instance TextShow (f a) => TextShow (Clown f a b) where
     showbPrec = $(makeShowbPrec ''Clown)
-instance (TextShow1 f, TextShow a) => TextShow1 (Clown f a) where
+instance TextShow (f a) => TextShow1 (Clown f a) where
     liftShowbPrec = $(makeLiftShowbPrec ''Clown)
 $(deriveTextShow2 ''Clown)
 
diff --git a/src/TextShow/GHC/LanguageExtensions/Type.hs b/src/TextShow/GHC/LanguageExtensions/Type.hs
new file mode 100644
--- /dev/null
+++ b/src/TextShow/GHC/LanguageExtensions/Type.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE CPP             #-}
+
+#if defined(MIN_VERSION_ghc_boot)
+{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+#endif
+
+{-|
+Module:      TextShow.GHC.LanguageExtensions.Type
+Copyright:   (C) 2014-2016 Ryan Scott
+License:     BSD-style (see the file LICENSE)
+Maintainer:  Ryan Scott
+Stability:   Provisional
+Portability: GHC
+
+Monomorphic 'TextShow' function for the 'Extension' data type.
+This module only exports functions if using @ghc-boot@.
+
+/Since: 3.3/
+-}
+module TextShow.GHC.LanguageExtensions.Type (
+#if !defined(MIN_VERSION_ghc_boot)
+    ) where
+#else
+      showbExtension
+    ) where
+
+import GHC.LanguageExtensions.Type (Extension)
+
+import TextShow (TextShow(..), Builder)
+import TextShow.TH (deriveTextShow)
+
+-- | Convert an 'Extension' to a 'Builder'.
+-- This function is only available when using @ghc-boot@.
+--
+-- /Since: 3.3/
+showbExtension :: Extension -> Builder
+showbExtension = showb
+
+$(deriveTextShow ''Extension)
+#endif
diff --git a/src/TextShow/GHC/PackageDb.hs b/src/TextShow/GHC/PackageDb.hs
new file mode 100644
--- /dev/null
+++ b/src/TextShow/GHC/PackageDb.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE CPP             #-}
+
+#if defined(MIN_VERSION_ghc_boot)
+{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+#endif
+
+{-|
+Module:      TextShow.GHC.PackageDb
+Copyright:   (C) 2014-2016 Ryan Scott
+License:     BSD-style (see the file LICENSE)
+Maintainer:  Ryan Scott
+Stability:   Provisional
+Portability: GHC
+
+Monomorphic 'TextShow' functions for data types in the "GHC.PackageDb" module.
+This module only exports functions if using @ghc-boot@.
+
+/Since: 3.3/
+-}
+module TextShow.GHC.PackageDb (
+#if !defined(MIN_VERSION_ghc_boot)
+    ) where
+#else
+      liftShowbInstalledPackageInfoPrec2
+# if __GLASGOW_HASKELL__ >= 801
+    , liftShowbDbModulePrec2
+# else
+    , liftShowbOriginalModulePrec2
+    , liftShowbExposedModulePrec2
+# endif
+    ) where
+
+import GHC.PackageDb
+
+import TextShow (TextShow(..), TextShow2(..), Builder)
+import TextShow.TH (deriveTextShow, deriveTextShow1, deriveTextShow2)
+
+-- | Convert an 'InstalledPackageInfo' value to a 'Builder' with the given
+-- show functions and precedence.
+-- This function is only available when using @ghc-boot@ and GHC 8.1 or later.
+--
+-- /Since: 3.3/
+liftShowbInstalledPackageInfoPrec2 :: ( TextShow srcpkgid
+                                      , TextShow srcpkgname
+# if __GLASGOW_HASKELL__ >= 801
+                                      , TextShow unitid
+# endif
+                                      )
+                                   => (Int -> a -> Builder) -> ([a] -> Builder)
+                                   -> (Int -> b -> Builder) -> ([b] -> Builder)
+                                   -> Int
+                                   -> InstalledPackageInfo srcpkgid srcpkgname
+# if __GLASGOW_HASKELL__ >= 801
+                                                           unitid
+# endif
+                                                           a b
+                                   -> Builder
+liftShowbInstalledPackageInfoPrec2 = liftShowbPrec2
+
+# if __GLASGOW_HASKELL__ >= 801
+-- | Convert a 'DbModule' value to a 'Builder' with the given show functions
+-- and precedence.
+-- This function is only available when using @ghc-boot@.
+--
+-- /Since: 3.3/
+liftShowbDbModulePrec2 :: (Int -> unitid     -> Builder) -> ([unitid]     -> Builder)
+                       -> (Int -> modulename -> Builder) -> ([modulename] -> Builder)
+                       -> Int -> DbModule unitid modulename -> Builder
+liftShowbDbModulePrec2 = liftShowbPrec2
+# else
+-- | Convert an 'OriginalModule' value to a 'Builder' with the given show functions
+-- and precedence.
+-- This function is only available when using @ghc-boot@.
+--
+-- /Since: 3.3/
+liftShowbOriginalModulePrec2 :: (Int -> unitid     -> Builder) -> ([unitid]     -> Builder)
+                             -> (Int -> modulename -> Builder) -> ([modulename] -> Builder)
+                             -> Int -> OriginalModule unitid modulename -> Builder
+liftShowbOriginalModulePrec2 = liftShowbPrec2
+
+-- | Convert an 'ExposedModule' value to a 'Builder' with the given show functions
+-- and precedence.
+-- This function is only available when using @ghc-boot@.
+--
+-- /Since: 3.3/
+liftShowbExposedModulePrec2 :: (Int -> unitid     -> Builder) -> ([unitid]     -> Builder)
+                            -> (Int -> modulename -> Builder) -> ([modulename] -> Builder)
+                            -> Int -> ExposedModule unitid modulename -> Builder
+liftShowbExposedModulePrec2 = liftShowbPrec2
+# endif
+
+$(deriveTextShow  ''InstalledPackageInfo)
+$(deriveTextShow1 ''InstalledPackageInfo)
+$(deriveTextShow2 ''InstalledPackageInfo)
+# if __GLASGOW_HASKELL__ >= 801
+$(deriveTextShow  ''DbModule)
+$(deriveTextShow1 ''DbModule)
+$(deriveTextShow2 ''DbModule)
+# else
+$(deriveTextShow  ''OriginalModule)
+$(deriveTextShow1 ''OriginalModule)
+$(deriveTextShow2 ''OriginalModule)
+
+$(deriveTextShow  ''ExposedModule)
+$(deriveTextShow1 ''ExposedModule)
+$(deriveTextShow2 ''ExposedModule)
+# endif
+#endif
diff --git a/src/TextShow/Instances.hs b/src/TextShow/Instances.hs
--- a/src/TextShow/Instances.hs
+++ b/src/TextShow/Instances.hs
@@ -28,29 +28,32 @@
 
 import TextShow
 
-import TextShow.Compiler.Hoopl            ()
+import TextShow.Compiler.Hoopl              ()
 
-import TextShow.Control.Applicative.Trans ()
-import TextShow.Control.Monad.Trans       ()
+import TextShow.Control.Applicative.Trans   ()
+import TextShow.Control.Monad.Trans         ()
 
-import TextShow.Data.Bifunctor            ()
-import TextShow.Data.Binary               ()
-import TextShow.Data.Containers           ()
-import TextShow.Data.Functor.Trans        ()
-import TextShow.Data.Tagged               ()
-import TextShow.Data.Time                 ()
-import TextShow.Data.UnorderedContainers  ()
-import TextShow.Data.Vector               ()
+import TextShow.Data.Bifunctor              ()
+import TextShow.Data.Binary                 ()
+import TextShow.Data.Containers             ()
+import TextShow.Data.Functor.Trans          ()
+import TextShow.Data.Tagged                 ()
+import TextShow.Data.Time                   ()
+import TextShow.Data.UnorderedContainers    ()
+import TextShow.Data.Vector                 ()
 
-import TextShow.Language.Haskell.TH       ()
+import TextShow.GHC.LanguageExtensions.Type ()
+import TextShow.GHC.PackageDb               ()
 
-import TextShow.System.Console.Haskeline  ()
-import TextShow.System.Console.Terminfo   ()
-import TextShow.System.Locale             ()
-import TextShow.System.Posix              ()
-import TextShow.System.Random             ()
-import TextShow.System.Time               ()
-import TextShow.System.Win32              ()
+import TextShow.Language.Haskell.TH         ()
+
+import TextShow.System.Console.Haskeline    ()
+import TextShow.System.Console.Terminfo     ()
+import TextShow.System.Locale               ()
+import TextShow.System.Posix                ()
+import TextShow.System.Random               ()
+import TextShow.System.Time                 ()
+import TextShow.System.Win32                ()
 
 import TextShow.Text.PrettyPrint          ()
 
diff --git a/src/TextShow/Language/Haskell/TH.hs b/src/TextShow/Language/Haskell/TH.hs
--- a/src/TextShow/Language/Haskell/TH.hs
+++ b/src/TextShow/Language/Haskell/TH.hs
@@ -65,11 +65,17 @@
 #endif
     , showbName
     , showbName'
+    , showbNameFlavourPrec
+    , showbNameSpace
     , showbOccNamePrec
 #if MIN_VERSION_template_haskell(2,11,0)
     , showbOverlap
 #endif
     , showbPatPrec
+#if __GLASGOW_HASKELL__ >= 801
+    , showbPatSynArgsPrec
+    , showbPatSynDirPrec
+#endif
 #if MIN_VERSION_template_haskell(2,8,0)
     , showbPhasesPrec
 #endif
@@ -297,7 +303,18 @@
                                        else classify $ TL.tail t'
                             else False
 
+-- | Convert a 'NameFlavour' to a 'Builder' with the given precedence.
+--
+-- /Since: 3.3/
+showbNameFlavourPrec :: Int -> NameFlavour -> Builder
+showbNameFlavourPrec = showbPrec
 
+-- | Convert a 'NameSpace' to a 'Builder'.
+--
+-- /Since: 3.3/
+showbNameSpace :: NameSpace -> Builder
+showbNameSpace = showb
+
 -- | Convert an 'OccName' to a 'Builder' with the given precedence.
 --
 -- /Since: 2/
@@ -536,6 +553,22 @@
 showbTypeFamilyHeadPrec = showbPrec
 #endif
 
+#if __GLASGOW_HASKELL__ >= 801
+-- | Convert a 'PatSynArgs' value to a 'Builder' with the given precedence.
+-- This function is only available with GHC 8.1 or later.
+--
+-- /Since: 3.3/
+showbPatSynArgsPrec :: Int -> PatSynArgs -> Builder
+showbPatSynArgsPrec = showbPrec
+
+-- | Convert a 'PatSynDir' value to a 'Builder' with the given precedence.
+-- This function is only available with GHC 8.1 or later.
+--
+-- /Since: 3.3/
+showbPatSynDirPrec :: Int -> PatSynDir -> Builder
+showbPatSynDirPrec = showbPrec
+#endif
+
 $(deriveTextShow ''Body)
 $(deriveTextShow ''Callconv)
 $(deriveTextShow ''Clause)
@@ -557,6 +590,8 @@
 instance TextShow Name where
     showb = showbName
 
+$(deriveTextShow ''NameFlavour)
+$(deriveTextShow ''NameSpace)
 $(deriveTextShow ''OccName)
 $(deriveTextShow ''Pat)
 $(deriveTextShow ''PkgName)
@@ -609,4 +644,9 @@
 $(deriveTextShow ''TypeFamilyHead)
 #else
 $(deriveTextShow ''Strict)
+#endif
+
+#if __GLASGOW_HASKELL__ >= 801
+$(deriveTextShow ''PatSynArgs)
+$(deriveTextShow ''PatSynDir)
 #endif
diff --git a/tests/Instances/Data/Functor/Trans.hs b/tests/Instances/Data/Functor/Trans.hs
--- a/tests/Instances/Data/Functor/Trans.hs
+++ b/tests/Instances/Data/Functor/Trans.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP                        #-}
 {-# LANGUAGE FlexibleContexts           #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE StandaloneDeriving         #-}
@@ -15,7 +16,9 @@
 module Instances.Data.Functor.Trans () where
 
 import Data.Functor.Compose  (Compose(..))
+#if !(MIN_VERSION_QuickCheck(2,9,0))
 import Data.Functor.Constant (Constant(..))
+#endif
 import Data.Functor.Product  (Product(..))
 import Data.Functor.Reverse  (Reverse(..))
 import Data.Functor.Sum      (Sum(..))
@@ -26,7 +29,9 @@
 import Test.QuickCheck (Arbitrary(..), oneof)
 
 deriving instance Arbitrary (f (g a)) => Arbitrary (Compose f g a)
+#if !(MIN_VERSION_QuickCheck(2,9,0))
 deriving instance Arbitrary a         => Arbitrary (Constant a b)
+#endif
 deriving instance Arbitrary (f a)     => Arbitrary (Reverse f a)
 
 instance (Arbitrary (f a), Arbitrary (g a)) => Arbitrary (Product f g a) where
diff --git a/tests/Instances/GHC/LanguageExtensions/Type.hs b/tests/Instances/GHC/LanguageExtensions/Type.hs
new file mode 100644
--- /dev/null
+++ b/tests/Instances/GHC/LanguageExtensions/Type.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE CPP                #-}
+
+#if defined(MIN_VERSION_ghc_boot)
+{-# LANGUAGE StandaloneDeriving #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+#endif
+
+{-|
+Module:      Instances.GHC.LanguageExtensions.Type
+Copyright:   (C) 2014-2016 Ryan Scott
+License:     BSD-style (see the file LICENSE)
+Maintainer:  Ryan Scott
+Stability:   Provisional
+Portability: GHC
+
+Provides an 'Arbitrary' instance for the 'Extension' data type.
+-}
+module Instances.GHC.LanguageExtensions.Type () where
+
+#if defined(MIN_VERSION_ghc_boot)
+import GHC.LanguageExtensions.Type (Extension(..))
+import Test.QuickCheck (Arbitrary(..), arbitraryBoundedEnum)
+
+deriving instance Bounded Extension
+instance Arbitrary Extension where
+    arbitrary = arbitraryBoundedEnum
+#endif
diff --git a/tests/Instances/GHC/PackageDb.hs b/tests/Instances/GHC/PackageDb.hs
new file mode 100644
--- /dev/null
+++ b/tests/Instances/GHC/PackageDb.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE CPP                #-}
+
+#if defined(MIN_VERSION_ghc_boot)
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+#endif
+
+{-|
+Module:      Instances.GHC.PackageDb
+Copyright:   (C) 2014-2016 Ryan Scott
+License:     BSD-style (see the file LICENSE)
+Maintainer:  Ryan Scott
+Stability:   Provisional
+Portability: GHC
+
+Provides 'Arbitrary' instances for data types in the "GHC.PackageDb" module.
+-}
+module Instances.GHC.PackageDb () where
+
+#if defined(MIN_VERSION_ghc_boot)
+import GHC.PackageDb
+
+import Instances.Miscellaneous ()
+import Instances.Utils ((<@>))
+
+import Test.QuickCheck (Arbitrary(..))
+
+instance ( Arbitrary srcpkgid
+         , Arbitrary srcpkgname
+         , Arbitrary unitid
+         , Arbitrary modulename
+# if __GLASGOW_HASKELL__ >= 801
+         , Arbitrary mod
+# endif
+         )
+  => Arbitrary ( InstalledPackageInfo srcpkgid srcpkgname unitid modulename
+# if __GLASGOW_HASKELL__ >= 801
+                 mod
+# endif
+               ) where
+    arbitrary = InstalledPackageInfo <$> arbitrary <*> arbitrary <*> arbitrary
+                                     <*> arbitrary <*> arbitrary <@> []
+                                     <*> arbitrary <@> []        <@> []
+                                     <@> []        <@> []        <@> []
+                                     <@> []        <@> []        <@> []
+                                     <@> []        <@> []        <@> []
+                                     <@> []        <*> arbitrary <*> arbitrary
+                                     <*> arbitrary <*> arbitrary
+
+# if __GLASGOW_HASKELL__ >= 801
+instance (Arbitrary unitid, Arbitrary modulename)
+  => Arbitrary (DbModule unitid modulename) where
+    arbitrary = DbModule <$> arbitrary <*> arbitrary
+# else
+instance (Arbitrary unitid, Arbitrary modulename)
+  => Arbitrary (ExposedModule unitid modulename) where
+    arbitrary = ExposedModule <$> arbitrary <*> arbitrary
+
+instance (Arbitrary unitid, Arbitrary modulename)
+  => Arbitrary (OriginalModule unitid modulename) where
+    arbitrary = OriginalModule <$> arbitrary <*> arbitrary
+# endif
+#endif
diff --git a/tests/Instances/Language/Haskell/TH.hs b/tests/Instances/Language/Haskell/TH.hs
--- a/tests/Instances/Language/Haskell/TH.hs
+++ b/tests/Instances/Language/Haskell/TH.hs
@@ -134,6 +134,10 @@
 #else
         , FamilyD <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
 #endif
+#if __GLASGOW_HASKELL__ >= 801
+        , PatSynD <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+        , PatSynSigD <$> arbitrary <*> arbitrary
+#endif
         ]
 --     arbitrary = oneof [
 --           FunD              <$> arbitrary <*> arbitrary
@@ -300,6 +304,9 @@
 #if MIN_VERSION_template_haskell(2,7,0)
         , pure $ FamilyI fDec [fDec]
 #endif
+#if __GLASGOW_HASKELL__ >= 801
+        , PatSynI    <$> arbitrary <*> arbitrary
+#endif
         ]
 --     arbitrary = oneof [
 -- #if MIN_VERSION_template_haskell(2,5,0)
@@ -646,6 +653,17 @@
 deriving instance Enum Strict
 instance Arbitrary Strict where
     arbitrary = arbitraryBoundedEnum
+#endif
+
+#if __GLASGOW_HASKELL__ >= 801
+instance Arbitrary PatSynArgs where
+    arbitrary = oneof $ map pure [ PrefixPatSyn [fName]
+                                 , InfixPatSyn fName fName
+                                 , RecordPatSyn [fName]
+                                 ]
+
+instance Arbitrary PatSynDir where
+    arbitrary = oneof $ map pure [ Unidir, ImplBidir, ExplBidir [fClause] ]
 #endif
 
 deriving instance Arbitrary ModName
diff --git a/tests/Instances/Miscellaneous.hs b/tests/Instances/Miscellaneous.hs
--- a/tests/Instances/Miscellaneous.hs
+++ b/tests/Instances/Miscellaneous.hs
@@ -16,7 +16,9 @@
 
 #include "HsBaseConfig.h"
 
+#if !(MIN_VERSION_QuickCheck(2,9,0))
 import Data.Version (Version(..))
+#endif
 
 import Foreign.Ptr (Ptr, nullPtr, plusPtr)
 
@@ -56,9 +58,11 @@
 instance Arbitrary (Ptr a) where
     arbitrary = plusPtr nullPtr <$> arbitrary
 
+#if !(MIN_VERSION_QuickCheck(2,9,0))
 instance Arbitrary Version where
     arbitrary = pure $ Version [0] [""]
 --     arbitrary = Version <$> arbitrary <*> arbitrary
+#endif
 
 #if MIN_VERSION_base(4,5,0)
 
diff --git a/tests/Spec/GHC/LanguageExtensions/TypeSpec.hs b/tests/Spec/GHC/LanguageExtensions/TypeSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Spec/GHC/LanguageExtensions/TypeSpec.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE CPP #-}
+{-|
+Module:      Spec.GHC.LanguageExtensions.TypeSpec
+Copyright:   (C) 2014-2016 Ryan Scott
+License:     BSD-style (see the file LICENSE)
+Maintainer:  Ryan Scott
+Stability:   Provisional
+Portability: GHC
+
+@hspec@ tests for the 'Extension' data type.
+-}
+module Spec.GHC.LanguageExtensions.TypeSpec (main, spec) where
+
+import Prelude ()
+import Prelude.Compat
+
+import Test.Hspec (Spec, hspec, parallel)
+
+#if defined(MIN_VERSION_ghc_boot)
+import GHC.LanguageExtensions.Type (Extension)
+
+import Instances.GHC.LanguageExtensions.Type ()
+
+import Spec.Utils (prop_matchesTextShow)
+
+import Test.Hspec (describe)
+import Test.Hspec.QuickCheck (prop)
+
+import TextShow.GHC.LanguageExtensions.Type ()
+#endif
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = parallel $ do
+#if defined(MIN_VERSION_ghc_boot)
+    describe "Extension" $
+        prop "TextShow instance" (prop_matchesTextShow :: Int -> Extension -> Bool)
+#else
+    pure ()
+#endif
diff --git a/tests/Spec/GHC/PackageDbSpec.hs b/tests/Spec/GHC/PackageDbSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Spec/GHC/PackageDbSpec.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE CPP #-}
+{-|
+Module:      Spec.GHC.PackageDbSpec
+Copyright:   (C) 2014-2016 Ryan Scott
+License:     BSD-style (see the file LICENSE)
+Maintainer:  Ryan Scott
+Stability:   Provisional
+Portability: GHC
+
+@hspec@ tests for data types in the "GHC.PackageDb" module.
+-}
+module Spec.GHC.PackageDbSpec (main, spec) where
+
+import Prelude ()
+import Prelude.Compat
+
+import Test.Hspec (Spec, hspec, parallel)
+
+#if defined(MIN_VERSION_ghc_boot)
+import GHC.PackageDb
+
+import Instances.GHC.PackageDb ()
+
+import Spec.Utils (prop_matchesTextShow)
+
+import Test.Hspec (describe)
+import Test.Hspec.QuickCheck (prop)
+
+import TextShow.GHC.PackageDb ()
+
+ipiString :: String
+# if __GLASGOW_HASKELL__ >= 801
+type IPI = InstalledPackageInfo Int Int Int Int Int
+ipiString = "InstalledPackageInfo Int Int Int Int Int"
+# else
+type IPI = InstalledPackageInfo Int Int Int Int
+ipiString = "InstalledPackageInfo Int Int Int Int"
+# endif
+#endif
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = parallel $ do
+#if defined(MIN_VERSION_ghc_boot)
+    describe ipiString $
+        prop "TextShow instance" (prop_matchesTextShow :: Int -> IPI -> Bool)
+# if __GLASGOW_HASKELL__ >= 801
+    describe "DbModule Int Int" $
+        prop "TextShow instance" (prop_matchesTextShow :: Int -> DbModule Int Int -> Bool)
+# else
+    describe "OriginalModule Int Int" $
+        prop "TextShow instance" (prop_matchesTextShow :: Int -> OriginalModule Int Int -> Bool)
+    describe "ExposedModule Int Int" $
+        prop "TextShow instance" (prop_matchesTextShow :: Int -> ExposedModule Int Int -> Bool)
+# endif
+#else
+    pure ()
+#endif
diff --git a/tests/Spec/Language/Haskell/THSpec.hs b/tests/Spec/Language/Haskell/THSpec.hs
--- a/tests/Spec/Language/Haskell/THSpec.hs
+++ b/tests/Spec/Language/Haskell/THSpec.hs
@@ -111,6 +111,10 @@
         prop "TextShow instance"               (prop_matchesTextShow :: Int -> Name -> Bool)
     describe "showbName'" $
         prop "has the same output as showName" prop_showName'
+    describe "NameFlavour" $
+        prop "TextShow instance"               (prop_matchesTextShow :: Int -> NameFlavour -> Bool)
+    describe "NameSpace" $
+        prop "TextShow instance"               (prop_matchesTextShow :: Int -> NameSpace -> Bool)
     describe "OccName" $
         prop "TextShow instance"               (prop_matchesTextShow :: Int -> OccName -> Bool)
 #if MIN_VERSION_template_haskell(2,11,0)
@@ -119,6 +123,12 @@
 #endif
     describe "Pat" $
         prop "TextShow instance"               (prop_matchesTextShow :: Int -> Pat -> Bool)
+#if __GLASGOW_HASKELL__ >= 801
+    describe "PatSynArgs" $
+        prop "TextShow instance"               (prop_matchesTextShow :: Int -> PatSynArgs -> Bool)
+    describe "PatSynDir" $
+        prop "TextShow instance"               (prop_matchesTextShow :: Int -> PatSynDir -> Bool)
+#endif
 #if MIN_VERSION_template_haskell(2,8,0)
     describe "Phases" $
         prop "TextShow instance"               (prop_matchesTextShow :: Int -> Phases -> Bool)
diff --git a/text-show-instances.cabal b/text-show-instances.cabal
--- a/text-show-instances.cabal
+++ b/text-show-instances.cabal
@@ -1,5 +1,5 @@
 name:                text-show-instances
-version:             3.2.1
+version:             3.3
 synopsis:            Additional instances for text-show
 description:         @text-show-instances@ is a supplemental library to @text-show@
                      that provides additional @Show@ instances for data types in
@@ -15,6 +15,8 @@
                      .
                      * @<http://hackage.haskell.org/package/directory            directory>@
                      .
+                     * @<http://hackage.haskell.org/package/ghc-boot             ghc-boot>@
+                     .
                      * @<http://hackage.haskell.org/package/haskeline            haskeline>@
                      .
                      * @<http://hackage.haskell.org/package/hoopl                hoopl>@
@@ -29,8 +31,6 @@
                      .
                      * @<http://hackage.haskell.org/package/random               random>@
                      .
-                     * @<http://hackage.haskell.org/package/semigroups           semigroups>@
-                     .
                      * @<http://hackage.haskell.org/package/tagged               tagged>@
                      .
                      * @<http://hackage.haskell.org/package/template-haskell     template-haskell>@
@@ -84,6 +84,11 @@
   default:             False
   manual:              True
 
+flag ghc-boot
+  description:         Depend on the ghc-boot package.
+  default:             True
+  manual:              False
+
 library
   exposed-modules:     TextShow.Instances
 
@@ -108,6 +113,10 @@
                        TextShow.Text.XHtml
                        TextShow.Trace.Hpc
 
+                       -- Only exports functions if using ghc-boot
+                       TextShow.GHC.LanguageExtensions.Type
+                       TextShow.GHC.PackageDb
+
                        -- Only exports functions if using Windows
                        TextShow.System.Win32
 
@@ -133,7 +142,7 @@
                      , tagged               >= 0.4.4  && < 1
                      , template-haskell     >= 2.5    && < 2.12
                      , text                 >= 0.11.1 && < 1.3
-                     , text-show            >= 3      && < 4
+                     , text-show            >= 3.3    && < 4
                      , time                 >= 0.1    && < 1.7
                      , transformers         >= 0.2.1  && < 0.6
                      , transformers-compat  >= 0.5    && < 1
@@ -147,6 +156,9 @@
   includes:            inline.h
   install-includes:    inline.h
 
+  if flag(ghc-boot)
+    build-depends:     ghc-boot
+
   if os(windows)
     build-depends:     Win32                >= 2.1    && < 2.4
   else
@@ -175,10 +187,14 @@
                        Instances.Trace.Hpc
                        Instances.Utils
 
-                       -- Only exports functions if using Windows
+                       -- Only defines instances if using ghc-boot
+                       Instances.GHC.LanguageExtensions.Type
+                       Instances.GHC.PackageDb
+
+                       -- Only defines instances if using Windows
                        Instances.System.Win32
 
-                       -- Only exports functions if not using Windows
+                       -- Only defines instances if not using Windows
                        Instances.System.Console.Terminfo
                        Instances.System.Posix
 
@@ -203,10 +219,14 @@
                        Spec.Trace.HpcSpec
                        Spec.Utils
 
-                       -- Only exports functions if using Windows
+                       -- Only defines tests if using ghc-boot
+                       Spec.GHC.LanguageExtensions.TypeSpec
+                       Spec.GHC.PackageDbSpec
+
+                       -- Only defines tests if using Windows
                        Spec.System.Win32Spec
 
-                       -- Only exports functions if not using Windows
+                       -- Only defines tests if not using Windows
                        Spec.System.Console.TerminfoSpec
                        Spec.System.PosixSpec
   build-depends:       base                 >= 4.3    && < 5
@@ -232,8 +252,8 @@
                      , tagged               >= 0.4.4  && < 1
                      , template-haskell     >= 2.5    && < 2.12
                      , text                 >= 0.11.1 && < 1.3
-                     , text-show            >= 3.2    && < 4
-                     , th-orphans           >= 0.12   && < 1
+                     , text-show            >= 3.3    && < 4
+                     , th-orphans           >= 0.13.2 && < 1
                      , time                 >= 0.1    && < 1.7
                      , transformers         >= 0.2.1  && < 0.6
                      , transformers-compat  >= 0.5    && < 1
@@ -241,7 +261,10 @@
                      , vector               >= 0.9    && < 0.12
                      , xhtml                >= 3000.2 && < 3000.3
   if !flag(developer)
-    build-depends:     text-show-instances  == 3.2.1
+    build-depends:     text-show-instances  == 3.3
+
+  if flag(ghc-boot)
+    build-depends:     ghc-boot
 
   hs-source-dirs:      tests
   if flag(developer)
