diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+# 1.11.2 [2017.04.10]
+* Add `GEq`, `GShow`, `GEnum`, and `GIx` instances for the new data types
+  in `Foreign.C.Types` (`CBool`) and `System.Posix.Types` (`CBlkSize`,
+  `CBlkCnt`, `CClockId`, `CFsBlkCnt`, `CFsFilCnt`, `CId`, `CKey`, and `CTimer`)
+  introduced in `base-4.10.0.0`
+
 # 1.11.1 [2016.09.10]
 * Fix Template Haskell regression involving data families
 * Convert examples to test suite
diff --git a/generic-deriving.cabal b/generic-deriving.cabal
--- a/generic-deriving.cabal
+++ b/generic-deriving.cabal
@@ -1,5 +1,5 @@
 name:                   generic-deriving
-version:                1.11.1
+version:                1.11.2
 synopsis:               Generic programming library for generalised deriving.
 description:
 
@@ -31,7 +31,8 @@
                       , GHC == 7.6.3
                       , GHC == 7.8.4
                       , GHC == 7.10.3
-                      , GHC == 8.0.1
+                      , GHC == 8.0.2
+                      , GHC == 8.2.1
 extra-source-files:     CHANGELOG.md
                       , README.md
 
@@ -75,7 +76,7 @@
 
   build-depends:        containers       >= 0.1 && < 0.6
                       , ghc-prim                   < 1
-                      , template-haskell >= 2.4 && < 2.12
+                      , template-haskell >= 2.4 && < 2.13
 
   default-language:     Haskell2010
   ghc-options:          -Wall
@@ -86,9 +87,9 @@
   other-modules:        ExampleSpec
                         TypeInTypeSpec
   build-depends:        base             >= 4.3  && < 5
-                      , generic-deriving == 1.11.1
+                      , generic-deriving
                       , hspec            >= 2    && < 3
-                      , template-haskell >= 2.4  && < 2.12
+                      , template-haskell >= 2.4  && < 2.13
   hs-source-dirs:       tests
   default-language:     Haskell2010
   ghc-options:          -Wall -threaded -rtsopts
diff --git a/src/Generics/Deriving/Enum.hs b/src/Generics/Deriving/Enum.hs
--- a/src/Generics/Deriving/Enum.hs
+++ b/src/Generics/Deriving/Enum.hs
@@ -537,6 +537,46 @@
 instance GEnum a => GEnum (ZipList a) where
   genum = genumDefault
 
+#if MIN_VERSION_base(4,10,0)
+instance GEnum CBool where
+  genum = coerce (genum :: [HTYPE_BOOL])
+
+# if defined(HTYPE_BLKSIZE_T)
+instance GEnum CBlkSize where
+  genum = coerce (genum :: [HTYPE_BLKSIZE_T])
+# endif
+
+# if defined(HTYPE_BLKCNT_T)
+instance GEnum CBlkCnt where
+  genum = coerce (genum :: [HTYPE_BLKCNT_T])
+# endif
+
+# if defined(HTYPE_CLOCKID_T)
+instance GEnum CClockId where
+  genum = coerce (genum :: [HTYPE_CLOCKID_T])
+# endif
+
+# if defined(HTYPE_FSBLKCNT_T)
+instance GEnum CFsBlkCnt where
+  genum = coerce (genum :: [HTYPE_FSBLKCNT_T])
+# endif
+
+# if defined(HTYPE_FSFILCNT_T)
+instance GEnum CFsFilCnt where
+  genum = coerce (genum :: [HTYPE_FSFILCNT_T])
+# endif
+
+# if defined(HTYPE_ID_T)
+instance GEnum CId where
+  genum = coerce (genum :: [HTYPE_ID_T])
+# endif
+
+# if defined(HTYPE_KEY_T)
+instance GEnum CKey where
+  genum = coerce (genum :: [HTYPE_KEY_T])
+# endif
+#endif
+
 --------------------------------------------------------------------------------
 -- Generic Ix
 --------------------------------------------------------------------------------
@@ -1051,4 +1091,60 @@
   range   = rangeDefault
   index   = indexDefault
   inRange = inRangeDefault
+#endif
+
+#if MIN_VERSION_base(4,10,0)
+instance GIx CBool where
+  range   = rangeEnum
+  index   = indexIntegral
+  inRange = inRangeOrd
+
+# if defined(HTYPE_BLKSIZE_T)
+instance GIx CBlkSize where
+  range   = rangeEnum
+  index   = indexIntegral
+  inRange = inRangeOrd
+# endif
+
+# if defined(HTYPE_BLKCNT_T)
+instance GIx CBlkCnt where
+  range   = rangeEnum
+  index   = indexIntegral
+  inRange = inRangeOrd
+# endif
+
+# if defined(HTYPE_CLOCKID_T)
+instance GIx CClockId where
+  range   = rangeEnum
+  index   = indexIntegral
+  inRange = inRangeOrd
+# endif
+
+# if defined(HTYPE_FSBLKCNT_T)
+instance GIx CFsBlkCnt where
+  range   = rangeEnum
+  index   = indexIntegral
+  inRange = inRangeOrd
+# endif
+
+# if defined(HTYPE_FSFILCNT_T)
+instance GIx CFsFilCnt where
+  range   = rangeEnum
+  index   = indexIntegral
+  inRange = inRangeOrd
+# endif
+
+# if defined(HTYPE_ID_T)
+instance GIx CId where
+  range   = rangeEnum
+  index   = indexIntegral
+  inRange = inRangeOrd
+# endif
+
+# if defined(HTYPE_KEY_T)
+instance GIx CKey where
+  range   = rangeEnum
+  index   = indexIntegral
+  inRange = inRangeOrd
+# endif
 #endif
diff --git a/src/Generics/Deriving/Eq.hs b/src/Generics/Deriving/Eq.hs
--- a/src/Generics/Deriving/Eq.hs
+++ b/src/Generics/Deriving/Eq.hs
@@ -576,3 +576,48 @@
 
 instance GEq a => GEq (ZipList a) where
   geq = geqdefault
+
+#if MIN_VERSION_base(4,10,0)
+instance GEq CBool where
+  geq = (==)
+
+# if defined(HTYPE_BLKSIZE_T)
+instance GEq CBlkSize where
+  geq = (==)
+# endif
+
+# if defined(HTYPE_BLKCNT_T)
+instance GEq CBlkCnt where
+  geq = (==)
+# endif
+
+# if defined(HTYPE_CLOCKID_T)
+instance GEq CClockId where
+  geq = (==)
+# endif
+
+# if defined(HTYPE_FSBLKCNT_T)
+instance GEq CFsBlkCnt where
+  geq = (==)
+# endif
+
+# if defined(HTYPE_FSFILCNT_T)
+instance GEq CFsFilCnt where
+  geq = (==)
+# endif
+
+# if defined(HTYPE_ID_T)
+instance GEq CId where
+  geq = (==)
+# endif
+
+# if defined(HTYPE_KEY_T)
+instance GEq CKey where
+  geq = (==)
+# endif
+
+# if defined(HTYPE_TIMER_T)
+instance GEq CTimer where
+  geq = (==)
+# endif
+#endif
diff --git a/src/Generics/Deriving/Show.hs b/src/Generics/Deriving/Show.hs
--- a/src/Generics/Deriving/Show.hs
+++ b/src/Generics/Deriving/Show.hs
@@ -615,3 +615,48 @@
 
 instance GShow a => GShow (ZipList a) where
   gshowsPrec = gshowsPrecdefault
+
+#if MIN_VERSION_base(4,10,0)
+instance GShow CBool where
+  gshowsPrec = showsPrec
+
+# if defined(HTYPE_BLKSIZE_T)
+instance GShow CBlkSize where
+  gshowsPrec = showsPrec
+# endif
+
+# if defined(HTYPE_BLKCNT_T)
+instance GShow CBlkCnt where
+  gshowsPrec = showsPrec
+# endif
+
+# if defined(HTYPE_CLOCKID_T)
+instance GShow CClockId where
+  gshowsPrec = showsPrec
+# endif
+
+# if defined(HTYPE_FSBLKCNT_T)
+instance GShow CFsBlkCnt where
+  gshowsPrec = showsPrec
+# endif
+
+# if defined(HTYPE_FSFILCNT_T)
+instance GShow CFsFilCnt where
+  gshowsPrec = showsPrec
+# endif
+
+# if defined(HTYPE_ID_T)
+instance GShow CId where
+  gshowsPrec = showsPrec
+# endif
+
+# if defined(HTYPE_KEY_T)
+instance GShow CKey where
+  gshowsPrec = showsPrec
+# endif
+
+# if defined(HTYPE_TIMER_T)
+instance GShow CTimer where
+  gshowsPrec = showsPrec
+# endif
+#endif
diff --git a/src/Generics/Deriving/TH.hs b/src/Generics/Deriving/TH.hs
--- a/src/Generics/Deriving/TH.hs
+++ b/src/Generics/Deriving/TH.hs
@@ -689,8 +689,8 @@
     t', t'' :: Type
     t' = case gk of
               Gen1 _ (Just _kvName) ->
--- See Note [Generic1 is polykinded on GHC 8.2]
-#if __GLASGOW_HASKELL__ >= 801
+-- See Note [Generic1 is polykinded in base-4.10]
+#if MIN_VERSION_base(4,10,0)
                 t
 #else
                 substNameWithKind _kvName starK t
@@ -1063,8 +1063,8 @@
 
         -- Substitute kind * for any dropped kind variables
     let varTysExpSubst :: [Type]
--- See Note [Generic1 is polykinded on GHC 8.2]
-#if __GLASGOW_HASKELL__ >= 801
+-- See Note [Generic1 is polykinded in base-4.10]
+#if MIN_VERSION_base(4,10,0)
         varTysExpSubst = varTysExp
 #else
         varTysExpSubst = map (substNamesWithKindStar droppedKindVarNames) varTysExp
@@ -1077,8 +1077,8 @@
         (remainingTysExpSubst, droppedTysExpSubst) =
           splitAt remainingLength varTysExpSubst
 
--- See Note [Generic1 is polykinded on GHC 8.2]
-#if __GLASGOW_HASKELL__ < 801
+-- See Note [Generic1 is polykinded in base-4.10]
+#if !(MIN_VERSION_base(4,10,0))
     -- If any of the dropped types were polykinded, ensure that there are of
     -- kind * after substituting * for the dropped kind variables. If not,
     -- throw an error.
@@ -1104,8 +1104,8 @@
         --   instance C (Fam [Char])
     let varTysOrigSubst :: [Type]
         varTysOrigSubst =
--- See Note [Generic1 is polykinded on GHC 8.2]
-#if __GLASGOW_HASKELL__ >= 801
+-- See Note [Generic1 is polykinded in base-4.10]
+#if MIN_VERSION_base(4,10,0)
           id
 #else
           map (substNamesWithKindStar droppedKindVarNames)
@@ -1185,7 +1185,7 @@
 
 Then k gets specialized to *, which means that k should NOT show up in the RHS of
 a Rep1 type instance! To avoid this, make sure to substitute k with *.
-See also Note [Generic1 is polykinded on GHC 8.2].
+See also Note [Generic1 is polykinded in base-4.10].
 
 Note [Arguments to generated type synonyms]
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1314,10 +1314,10 @@
 explicit kind signatures, leaving it up to GHC's kind inference machinery to
 figure out the correct kinds.
 
-Note [Generic1 is polykinded on GHC 8.2]
+Note [Generic1 is polykinded in base-4.10]
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Prior to GHC 8.2, Generic1 :: (* -> *) -> Constraint. This means that if a Generic1
+Prior to base-4.10, Generic1 :: (* -> *) -> Constraint. This means that if a Generic1
 instance is defined for a polykinded data type like so:
 
   data Proxy k (a :: k) = Proxy
@@ -1329,6 +1329,6 @@
 We must take great care to ensure that all occurrences of k are substituted with *,
 or else the generated instance will be ill kinded.
 
-On GHC 8.2 and later, Generic1 :: (k -> *) -> Constraint. This means we don't have
-to do this kind unification anymore! Hooray!
+In base-4.10 and later, Generic1 :: (k -> *) -> Constraint. This means we don't have
+to do any of this kind unification trickery anymore! Hooray!
 -}
diff --git a/src/Generics/Deriving/TH/Internal.hs b/src/Generics/Deriving/TH/Internal.hs
--- a/src/Generics/Deriving/TH/Internal.hs
+++ b/src/Generics/Deriving/TH/Internal.hs
@@ -536,8 +536,8 @@
                    case mbLastArgKindName of
                         Nothing   -> map tyVarBndrToType headRequiredTvbs
                         Just _lakn ->
--- See Note [Generic1 is polykinded on GHC 8.2] in Generics.Deriving.TH
-#if __GLASGOW_HASKELL__ >= 801
+-- See Note [Generic1 is polykinded in base-4.10] in Generics.Deriving.TH
+#if MIN_VERSION_base(4,10,0)
                           map tyVarBndrToType headRequiredTvbs
 #else
                           map (substNameWithKindStarInTyVarBndr _lakn)
diff --git a/tests/TypeInTypeSpec.hs b/tests/TypeInTypeSpec.hs
--- a/tests/TypeInTypeSpec.hs
+++ b/tests/TypeInTypeSpec.hs
@@ -12,19 +12,42 @@
 import Test.Hspec
 
 #if __GLASGOW_HASKELL__ >= 800
-import Data.Proxy (Proxy)
+import Data.Proxy (Proxy(..))
 import Generics.Deriving.TH
 
+# if MIN_VERSION_base(4,10,0)
+import Generics.Deriving (Generic1(..))
+# endif
+
 data TyCon x (a :: x) (b :: k) = TyCon k x (Proxy a) (TyCon x a b)
 $(deriveAll0And1 ''TyCon)
 
 data family TyFam x (a :: x) (b :: k)
 data instance TyFam x (a :: x) (b :: k) = TyFam k x (Proxy a) (TyFam x a b)
 $(deriveAll0And1 'TyFam)
+
+# if MIN_VERSION_base(4,10,0)
+gen1PolyKinds :: Generic1 f => f 'True -> Rep1 f 'True
+gen1PolyKinds = from1
+# endif
 #endif
 
 main :: IO ()
 main = hspec spec
 
 spec :: Spec
-spec = return ()
+spec = parallel $ do
+#if MIN_VERSION_base(4,10,0)
+    describe "TyCon Bool 'False 'True" $
+      it "has an appropriately kinded Generic1 instance" $
+        let rep :: Rep1 (TyCon Bool 'False) 'True
+            rep = gen1PolyKinds $ let x = TyCon True False Proxy x in x
+         in seq rep () `shouldBe` ()
+    describe "TyFam Bool 'False 'True" $
+      it "has an appropriately kinded Generic1 instance" $
+        let rep :: Rep1 (TyFam Bool 'False) 'True
+            rep = gen1PolyKinds $ let x = TyFam True False Proxy x in x
+         in seq rep () `shouldBe` ()
+#else
+    return ()
+#endif
