diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,14 @@
+## 0.2 [2024.05.03]
+* Drop support for GHC 7.10 and earlier.
+* When building with GHC 9.10 or later, `Data.Tuple.Constraint` will simply
+  re-export constraint tuple definitions found in `GHC.Classes`. If building
+  with an older version of GHC, `Data.Tuple.Constraint` will backport the
+  definitions from `GHC.Classes.
+* Provide nullary constraint tuples named `CUnit` and unary constraint tuples
+  named `CSolo` for consistency with `GHC.Classes` in GHC 9.10+.
+* Provide constraint tuples up to size 64 when building with GHC 9.2 or later.
+  (Earlier versions of GHC impose a maximum tuple size of 62.)
+
 ### 0.1.2 [2019.11.24]
 * Introduce the `Data.Tuple.Constraint.{TypeFamily,TypeSynonym}` modules that
   provide ways of directly accessing constraint tuple type constructors through
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
 [![Hackage Dependencies](https://img.shields.io/hackage-deps/v/constraint-tuples.svg)](http://packdeps.haskellers.com/reverse/constraint-tuples)
 [![Haskell Programming Language](https://img.shields.io/badge/language-Haskell-blue.svg)][Haskell.org]
 [![BSD3 License](http://img.shields.io/badge/license-BSD3-brightgreen.svg)][tl;dr Legal: BSD3]
-[![Build](https://img.shields.io/travis/RyanGlScott/constraint-tuples.svg)](https://travis-ci.org/RyanGlScott/constraint-tuples)
+[![Build Status](https://github.com/RyanGlScott/constraint-tuples/workflows/Haskell-CI/badge.svg)](https://github.com/RyanGlScott/constraint-tuples/actions?query=workflow%3AHaskell-CI)
 
 [Hackage: constraint-tuples]:
   http://hackage.haskell.org/package/constraint-tuples
@@ -23,7 +23,8 @@
 API with slight differences in their implementation:
 
 * `Data.Tuple.Constraint`: A `CTupleN` class compiles to a dictionary data type
-   with `N` fields.
+   with `N` fields. (When building with GHC 9.10 or later, this will simply
+   re-export the constraint tuples offered by `GHC.Classes`.)
 * `Data.Tuple.Constraint.ClassNewtype`: A `CTupleN` class compiles to a newtype
    around the corresponding built-in constraint tuple type with `N` arguments.
 * `Data.Tuple.Constraint.TypeFamily`: A `CTupleN` type alias is a constraint
@@ -32,6 +33,4 @@
   type family axiom.
 * `Data.Tuple.Constraint.TypeSynonym`: A `CTupleN` type alias is a constraint
   tuple type constructor with `N` arguments obtained by way of a type synonym.
-  This will compile directly to a built-in constraint tuple, but because this
-  requires use of GHC features only present on 8.0 or later, this module does
-  not export anything on earlier versions of GHC.
+  This will compile directly to a built-in constraint tuple.
diff --git a/constraint-tuples.cabal b/constraint-tuples.cabal
--- a/constraint-tuples.cabal
+++ b/constraint-tuples.cabal
@@ -1,6 +1,6 @@
 cabal-version:       >=1.10
 name:                constraint-tuples
-version:             0.1.2
+version:             0.2
 synopsis:            Partially applicable constraint tuples
 description:         This library provides classes and type aliases that
                      emulate the behavior of GHC's constraint tuple syntax.
@@ -12,25 +12,24 @@
                      implementation:
                      .
                      * "Data.Tuple.Constraint": A @CTupleN@ class compiles to
-                       a dictionary data type with @N@ fields.
+                       a dictionary data type with @N@ fields. (When building
+                       with GHC 9.10 or later, this will simply re-export the
+                       constraint tuples offered by "GHC.Classes".)
                      .
                      * "Data.Tuple.Constraint.ClassNewtype": A @CTupleN@ class
                        compiles to a newtype around the corresponding built-in
                        constraint tuple type with @N@ arguments.
                      .
-                     * @Data.Tuple.Constraint.TypeFamily@: A @CTupleN@ type
+                     * "Data.Tuple.Constraint.TypeFamily": A @CTupleN@ type
                        alias is a constraint tuple type constructor with @N@
                        arguments obtained by way of a type family. This will
                        compile to a built-in constraint tuple, but casted with
                        a type family axiom.
                      .
-                     * @Data.Tuple.Constraint.TypeSynonym@: A @CTupleN@ type
+                     * "Data.Tuple.Constraint.TypeSynonym": A @CTupleN@ type
                        alias is a constraint tuple type constructor with @N@
                        arguments obtained by way of a type synonym. This will
-                       compile directly to a built-in constraint tuple, but
-                       because this requires use of GHC features only present
-                       on 8.0 or later, this module does not export anything on
-                       earlier versions of GHC.
+                       compile directly to a built-in constraint tuple.
 homepage:            https://github.com/RyanGlScott/constraint-tuples
 bug-reports:         https://github.com/RyanGlScott/constraint-tuples/issues
 license:             BSD3
@@ -47,14 +46,18 @@
                      generator-script/LICENSE
                      generator-script/generator-script.cabal
                      generator-script/exe/GeneratorScript.hs
-tested-with:         GHC == 7.6.3
-                   , 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
-                   , GHC == 8.8.1
+                   , GHC == 8.8.4
+                   , GHC == 8.10.7
+                   , GHC == 9.0.2
+                   , GHC == 9.2.8
+                   , GHC == 9.4.8
+                   , GHC == 9.6.5
+                   , GHC == 9.8.2
+                   , GHC == 9.10.1
 
 source-repository head
   type:                git
@@ -65,7 +68,8 @@
                        Data.Tuple.Constraint.ClassNewtype
                        Data.Tuple.Constraint.TypeFamily
                        Data.Tuple.Constraint.TypeSynonym
-  build-depends:       base >= 4.6 && < 5
+  build-depends:       base >= 4.9 && < 5
+                     , ghc-prim
   hs-source-dirs:      src
   default-language:    Haskell2010
   ghc-options:         -Wall
diff --git a/generator-script/exe/GeneratorScript.hs b/generator-script/exe/GeneratorScript.hs
--- a/generator-script/exe/GeneratorScript.hs
+++ b/generator-script/exe/GeneratorScript.hs
@@ -4,8 +4,7 @@
 -- to invoke this.
 module Main (main) where
 
-import Data.List.Compat
-import GHC.Exts (maxTupleSize)
+import Data.List.Compat (intercalate, intersperse)
 import Prelude ()
 import Prelude.Compat
 import Options.Applicative
@@ -52,10 +51,16 @@
   let sourceCode = unlines $ preamble args ++ decs args in
   writeFile output sourceCode
 
+tupleName :: Int -> String
+tupleName n
+  | n == 0    = "CUnit"
+  | n == 1    = "CSolo"
+  | otherwise = "CTuple" ++ show n
+
 genClassDef :: Bool -> Int -> String
 genClassDef classNewtype n =
      parens (concat (intersperse ", " cNums))
-  ++ " => CTuple" ++ show n
+  ++ " => " ++ tupleName n
   ++ [ ' ' | n > 0 ]
   ++ unwords cNums
   where
@@ -87,9 +92,7 @@
 genAlias :: Bool -- True for type families, False for type synonyms
          -> Int -> String
 genAlias typeFams i =
-     "type CTuple"
-  ++ show i ++ " = Decomposer"
-  ++ show i ++ " (" ++ arg ++ ")"
+     "type " ++ tupleName i ++ " = Decomposer" ++ show i ++ " (" ++ arg ++ ")"
   where
     arg :: String
     arg | typeFams  = dummyClass
@@ -107,12 +110,7 @@
 classDefHaddocks i =
   [ "-- | A constraint tuple class with " ++ show i ++
     " argument" ++ pluralSuffix i ++ "."
-  ] ++
-  if i == 0
-  then [ "--"
-       , "-- This class is only defined on GHC 7.8 or later."
-       ]
-  else []
+  ]
 
 aliasHaddocks :: Int -> String
 aliasHaddocks i =
@@ -130,19 +128,18 @@
   [ "{-# LANGUAGE ConstraintKinds #-}"
   , "{-# LANGUAGE CPP #-}"
   , "{-# LANGUAGE KindSignatures #-}"
+  , "{-# LANGUAGE Safe #-}"
   ] ++ case mode of
          Default      -> classDefExts
          ClassNewtype -> classDefExts
          TypeFamily   -> [ "{-# LANGUAGE TypeFamilies #-}" ]
-         TypeSynonym  -> [ "#if __GLASGOW_HASKELL__ >= 800"
-                         , "{-# LANGUAGE DataKinds #-}"
+         TypeSynonym  -> [ "{-# LANGUAGE DataKinds #-}"
                          , "{-# LANGUAGE PolyKinds #-}"
-                         , "# if __GLASGOW_HASKELL__ < 806"
+                         , "#if __GLASGOW_HASKELL__ < 806"
                          , "{-# LANGUAGE TypeInType #-}"
-                         , "# endif"
                          , "#endif"
                          ]
-    ++ safeHaskell ++
+    ++
   [ ""
   , "-- | This module provides " ++ things ++ " that emulate the behavior of GHC's constraint"
   , "-- tuple syntax. Unlike GHC's built-in constraint tuples, the " ++ things ++ " in this"
@@ -158,12 +155,7 @@
       [ "{-# LANGUAGE FlexibleInstances #-}"
       , "{-# LANGUAGE MultiParamTypeClasses #-}"
       , "{-# LANGUAGE UndecidableInstances #-}"
-      , "#if __GLASGOW_HASKELL__ >= 708 && __GLASGOW_HASKELL__ < 710"
-      , "{-# LANGUAGE NullaryTypeClasses #-}"
-      , "#endif"
-      , "#if __GLASGOW_HASKELL__ >= 800"
       , "{-# LANGUAGE UndecidableSuperClasses #-}"
-      , "#endif"
       ]
 
     things :: String
@@ -181,87 +173,56 @@
 
     exports :: [String]
     exports =
-      concat
-        [ if mode == TypeSynonym
-          then [ "#if __GLASGOW_HASKELL__ < 800"
-               , "  () where"
-               , "#else"
-               ]
-          else []
-        , [ "  ( -- * Constraint tuples"
-          ] ++ cTupleExports ++
-          [ "  ) where" ]
-        ]
+      [ "  ( -- * Constraint tuples"
+      , "    CTuple0"
+      , "  , CTuple1"
+      ] ++ cTupleExports ++
+      [ "  ) where" ]
 
     cTupleExports :: [String]
     cTupleExports =
       flip concatMap [0..maxTupleSize] $ \i ->
-        case i of
-          0 ->
-               if mode `elem` classDefModes
-               then [ "#if __GLASGOW_HASKELL__ >= 708"
-                    , "    CTuple0,"
-                    , "#endif"
-                    ]
-               else [ "    CTuple0" ]
-          1 |  mode `elem` classDefModes
-            -> [ "    CTuple1" ]
-          _ -> [ "  , CTuple" ++ show i ]
-      where
-        classDefModes :: [Mode]
-        classDefModes = [Default, ClassNewtype]
+        [ "#if __GLASGOW_HASKELL__ >= 902" | largeTupleSize i ] ++
+        [ "  , " ++ tupleName i ] ++
+        [ "#endif" | largeTupleSize i ]
 
     imports :: [String]
     imports =
       case mode of
-        Default      -> []
+        Default      -> defaultImports
         ClassNewtype -> constraintImports
         TypeFamily   -> constraintImports
-        TypeSynonym  -> [ cTuple1Import
+        TypeSynonym  -> [ dtcImports
                         , "import Data.Kind (Constraint)"
                         , "import Data.Proxy (Proxy(..))"
-                        , ""
                         ]
 
-    constraintImports :: [String]
-    constraintImports =
-      [ cTuple1Import
-      , "#if __GLASGOW_HASKELL__ >= 800"
-      , "import Data.Kind (Constraint)"
+    defaultImports :: [String]
+    defaultImports =
+      [ "#if __GLASGOW_HASKELL__ >= 910"
+      , "import GHC.Classes"
       , "#else"
-      , "import GHC.Exts (Constraint)"
+      , "import Data.Kind (Constraint)"
       , "#endif"
-      , ""
       ]
 
-    cTuple1Import :: String
-    cTuple1Import = "import Data.Tuple.Constraint (CTuple1)"
-
-    safeHaskell :: [String]
-    safeHaskell =
-      case mode of
-        Default      -> [ safe ]
-        ClassNewtype -> safeOn8'0OrLater
-        TypeFamily   -> safeOn8'0OrLater
-        TypeSynonym  -> [ safe ]
-
-    safe :: String
-    safe = "{-# LANGUAGE Safe #-}"
-
-    safeOn8'0OrLater :: [String]
-    safeOn8'0OrLater =
-      [ "#if __GLASGOW_HASKELL__ >= 800"
-      , safe
-      , "#else"
-      , "{-# LANGUAGE Trustworthy #-}"
-      , "#endif"
+    constraintImports :: [String]
+    constraintImports =
+      [ dtcImports
+      , "import Data.Kind (Constraint)"
       ]
 
+    dtcImports :: String
+    dtcImports = "import Data.Tuple.Constraint (CTuple0, CTuple1, CSolo)"
+
     haddockNote :: [String]
     haddockNote =
       case mode of
         Default ->
-          []
+          [ "--"
+          , "-- When building with GHC 9.10 or later, this will simply re-export the"
+          , "-- constraint tuples offered by \"GHC.Classes\"."
+          ]
         ClassNewtype ->
           [ "--"
           , "-- Unlike \"Data.Tuple.Constraint\", a @CTupleN@ class defined in this module"
@@ -301,44 +262,85 @@
       , "-- The type aliases in this module are defined by way of "
           ++ if typeFams then "type families" else "type synonyms" ++ " that"
       , "-- decompose applications of constraint tuple type constructors to their arguments."
-      ] ++
-      if typeFams
-      then []
-      else [ "-- This requires the use of GHC capabilities that are only present on GHC 8.0 or"
-           , "-- later, so this module does not export anything on earlier versions of GHC."
-           ]
+      ]
 
 decs :: Args -> [String]
 decs Args{mode} =
-  flip concatMap [0..maxTupleSize] (\i ->
-    if mode /= Default && i == 1
-    then [] -- CTuple1 is imported from Data.Tuple.Constraint
-    else case mode of
-           Default      -> genClassDefs False i
-           ClassNewtype -> genClassDefs True  i
-           TypeFamily   -> genAliasDefs True  i
-           TypeSynonym  -> genAliasDefs False i
-         ++ [ "" ])
-  ++ [ "#endif" | mode == TypeSynonym ]
+  concat
+    [ concat
+        [ [ ""
+          , "#if __GLASGOW_HASKELL__ < 910"
+          ]
+        | mode == Default
+        ]
+    , [ "" ]
+    , extraDefs
+    , flip concatMap [0..maxTupleSize] (\i ->
+        if mode /= Default && i == 1
+        then [] -- CSolo is imported from Data.Tuple.Constraint
+        else case mode of
+               Default      -> genClassDefs False i
+               ClassNewtype -> genClassDefs True  i
+               TypeFamily   -> genAliasDefs True  i
+               TypeSynonym  -> genAliasDefs False i
+             ++ [ "" ])
+    , [ "#endif" | mode == Default ]
+    ]
   where
+    extraDefs :: [String]
+    extraDefs =
+      concat
+        [ [ "-- | An alias for a nullary constraint tuple."
+          , "type CTuple0 = (() :: Constraint)"
+          , ""
+          , "-- | An alias for a unary constraint tuple."
+          , "type CTuple1 = CSolo"
+          , ""
+          ]
+        | mode == Default
+        ]
+
     genClassDefs :: Bool -- Should the classes be newtypes?
                  -> Int -> [String]
     genClassDefs classNewtype i =
       let cTuple = genClassDef classNewtype i in
       concat
-        [ [ "#if __GLASGOW_HASKELL__ >= 708" | i == 0 ]
+        [ [ "#if __GLASGOW_HASKELL__ >= 902" | largeTupleSize i ]
         , classDefHaddocks i
         , [ "class    " ++ cTuple
           , "instance " ++ cTuple
           ]
-        , [ "#endif" | i == 0 ]
+        , [ "#endif" | largeTupleSize i ]
         ]
 
     genAliasDefs :: Bool -- True for type families, False for type synonyms
                  -> Int -> [String]
     genAliasDefs typeFams i =
-        aliasHaddocks i
-      : genAlias typeFams i
-      : if typeFams
-           then   genTypeFamilyDecomposers i
-           else [ genTypeSynonymDecomposer i ]
+      concat
+        [ [ "#if __GLASGOW_HASKELL__ >= 902" | largeTupleSize i ]
+        , [ aliasHaddocks i
+          , genAlias typeFams i
+          ]
+        , if typeFams
+             then   genTypeFamilyDecomposers i
+             else [ genTypeSynonymDecomposer i ]
+        , [ "#endif" | largeTupleSize i ]
+        ]
+
+-- | The maximum tuple size to generate.
+--
+-- This should stay in sync with the value of @GHC.Exts.maxTupleSize@. We define
+-- it here separately because different versions of GHC have different values
+-- of @GHC.Exts.maxTupleSize@, and we want the generator script to produce the
+-- same output regardless of which GHC version is used to build the script.
+maxTupleSize :: Int
+maxTupleSize = 64
+
+-- GHC 8.0 through 9.0 impose a maximum tuple size of 62, so one cannot define
+-- constraint tuples of larger sizes. GHC 9.2 and later, however, raise the
+-- maximum tuple size to 64 (see 'maxTupleSize' above). We would still like to
+-- define 63- and 64- tuples whenever possible, so we use this function to check
+-- if a tuple is too large for old GHCs (and therefore needs to be guarded by
+-- appropriate CPP).
+largeTupleSize :: Int -> Bool
+largeTupleSize i = i > 62
diff --git a/generator-script/generator-script.cabal b/generator-script/generator-script.cabal
--- a/generator-script/generator-script.cabal
+++ b/generator-script/generator-script.cabal
@@ -16,14 +16,18 @@
 copyright:           (C) 2018-2019 Ryan Scott
 category:            Data
 build-type:          Simple
-tested-with:         GHC == 7.6.3
-                   , 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
-                   , GHC == 8.8.1
+                   , GHC == 8.8.4
+                   , GHC == 8.10.7
+                   , GHC == 9.0.2
+                   , GHC == 9.2.8
+                   , GHC == 9.4.8
+                   , GHC == 9.6.5
+                   , GHC == 9.8.2
+                   , GHC == 9.10.1
 
 source-repository head
   type:                git
@@ -32,9 +36,9 @@
 
 executable generator-script
   main-is:             GeneratorScript.hs
-  build-depends:       base                  >= 4.6  && < 5
-                     , base-compat-batteries >= 0.10 && < 0.12
-                     , optparse-applicative  >= 0.13 && < 0.16
+  build-depends:       base                  >= 4.9  && < 5
+                     , base-compat-batteries >= 0.10 && < 0.15
+                     , optparse-applicative  >= 0.13 && < 0.19
   hs-source-dirs:      exe
   default-language:    Haskell2010
   ghc-options:         -Wall -threaded -rtsopts
diff --git a/src/Data/Tuple/Constraint.hs b/src/Data/Tuple/Constraint.hs
--- a/src/Data/Tuple/Constraint.hs
+++ b/src/Data/Tuple/Constraint.hs
@@ -1,26 +1,24 @@
 {-# LANGUAGE ConstraintKinds #-}
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE KindSignatures #-}
+{-# LANGUAGE Safe #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE UndecidableInstances #-}
-#if __GLASGOW_HASKELL__ >= 708 && __GLASGOW_HASKELL__ < 710
-{-# LANGUAGE NullaryTypeClasses #-}
-#endif
-#if __GLASGOW_HASKELL__ >= 800
 {-# LANGUAGE UndecidableSuperClasses #-}
-#endif
-{-# LANGUAGE Safe #-}
 
 -- | This module provides classes that emulate the behavior of GHC's constraint
 -- tuple syntax. Unlike GHC's built-in constraint tuples, the classes in this
 -- library can be partially applied.
+--
+-- When building with GHC 9.10 or later, this will simply re-export the
+-- constraint tuples offered by "GHC.Classes".
 module Data.Tuple.Constraint
   ( -- * Constraint tuples
-#if __GLASGOW_HASKELL__ >= 708
-    CTuple0,
-#endif
-    CTuple1
+    CTuple0
+  , CTuple1
+  , CUnit
+  , CSolo
   , CTuple2
   , CTuple3
   , CTuple4
@@ -82,19 +80,35 @@
   , CTuple60
   , CTuple61
   , CTuple62
+#if __GLASGOW_HASKELL__ >= 902
+  , CTuple63
+#endif
+#if __GLASGOW_HASKELL__ >= 902
+  , CTuple64
+#endif
   ) where
 
-#if __GLASGOW_HASKELL__ >= 708
--- | A constraint tuple class with 0 arguments.
---
--- This class is only defined on GHC 7.8 or later.
-class    () => CTuple0
-instance () => CTuple0
+#if __GLASGOW_HASKELL__ >= 910
+import GHC.Classes
+#else
+import Data.Kind (Constraint)
 #endif
 
+#if __GLASGOW_HASKELL__ < 910
+
+-- | An alias for a nullary constraint tuple.
+type CTuple0 = (() :: Constraint)
+
+-- | An alias for a unary constraint tuple.
+type CTuple1 = CSolo
+
+-- | A constraint tuple class with 0 arguments.
+class    () => CUnit
+instance () => CUnit
+
 -- | A constraint tuple class with 1 argument.
-class    c1 => CTuple1 c1
-instance c1 => CTuple1 c1
+class    c1 => CSolo c1
+instance c1 => CSolo c1
 
 -- | A constraint tuple class with 2 arguments.
 class    (c1, c2) => CTuple2 c1 c2
@@ -340,3 +354,16 @@
 class    (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62) => CTuple62 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62
 instance (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62) => CTuple62 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62
 
+#if __GLASGOW_HASKELL__ >= 902
+-- | A constraint tuple class with 63 arguments.
+class    (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63) => CTuple63 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62 c63
+instance (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63) => CTuple63 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62 c63
+#endif
+
+#if __GLASGOW_HASKELL__ >= 902
+-- | A constraint tuple class with 64 arguments.
+class    (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63, c64) => CTuple64 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62 c63 c64
+instance (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63, c64) => CTuple64 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62 c63 c64
+#endif
+
+#endif
diff --git a/src/Data/Tuple/Constraint/ClassNewtype.hs b/src/Data/Tuple/Constraint/ClassNewtype.hs
--- a/src/Data/Tuple/Constraint/ClassNewtype.hs
+++ b/src/Data/Tuple/Constraint/ClassNewtype.hs
@@ -1,20 +1,11 @@
 {-# LANGUAGE ConstraintKinds #-}
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE KindSignatures #-}
+{-# LANGUAGE Safe #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE UndecidableInstances #-}
-#if __GLASGOW_HASKELL__ >= 708 && __GLASGOW_HASKELL__ < 710
-{-# LANGUAGE NullaryTypeClasses #-}
-#endif
-#if __GLASGOW_HASKELL__ >= 800
 {-# LANGUAGE UndecidableSuperClasses #-}
-#endif
-#if __GLASGOW_HASKELL__ >= 800
-{-# LANGUAGE Safe #-}
-#else
-{-# LANGUAGE Trustworthy #-}
-#endif
 
 -- | This module provides classes that emulate the behavior of GHC's constraint
 -- tuple syntax. Unlike GHC's built-in constraint tuples, the classes in this
@@ -48,10 +39,10 @@
 -- construct a @Dict@ dictionary.
 module Data.Tuple.Constraint.ClassNewtype
   ( -- * Constraint tuples
-#if __GLASGOW_HASKELL__ >= 708
-    CTuple0,
-#endif
-    CTuple1
+    CTuple0
+  , CTuple1
+  , CUnit
+  , CSolo
   , CTuple2
   , CTuple3
   , CTuple4
@@ -113,22 +104,20 @@
   , CTuple60
   , CTuple61
   , CTuple62
+#if __GLASGOW_HASKELL__ >= 902
+  , CTuple63
+#endif
+#if __GLASGOW_HASKELL__ >= 902
+  , CTuple64
+#endif
   ) where
 
-import Data.Tuple.Constraint (CTuple1)
-#if __GLASGOW_HASKELL__ >= 800
+import Data.Tuple.Constraint (CTuple0, CTuple1, CSolo)
 import Data.Kind (Constraint)
-#else
-import GHC.Exts (Constraint)
-#endif
 
-#if __GLASGOW_HASKELL__ >= 708
 -- | A constraint tuple class with 0 arguments.
---
--- This class is only defined on GHC 7.8 or later.
-class    (() :: Constraint) => CTuple0
-instance (() :: Constraint) => CTuple0
-#endif
+class    (() :: Constraint) => CUnit
+instance (() :: Constraint) => CUnit
 
 -- | A constraint tuple class with 2 arguments.
 class    ((c1, c2) :: Constraint) => CTuple2 c1 c2
@@ -373,4 +362,16 @@
 -- | A constraint tuple class with 62 arguments.
 class    ((c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62) :: Constraint) => CTuple62 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62
 instance ((c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62) :: Constraint) => CTuple62 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62
+
+#if __GLASGOW_HASKELL__ >= 902
+-- | A constraint tuple class with 63 arguments.
+class    ((c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63) :: Constraint) => CTuple63 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62 c63
+instance ((c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63) :: Constraint) => CTuple63 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62 c63
+#endif
+
+#if __GLASGOW_HASKELL__ >= 902
+-- | A constraint tuple class with 64 arguments.
+class    ((c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63, c64) :: Constraint) => CTuple64 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62 c63 c64
+instance ((c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63, c64) :: Constraint) => CTuple64 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62 c63 c64
+#endif
 
diff --git a/src/Data/Tuple/Constraint/TypeFamily.hs b/src/Data/Tuple/Constraint/TypeFamily.hs
--- a/src/Data/Tuple/Constraint/TypeFamily.hs
+++ b/src/Data/Tuple/Constraint/TypeFamily.hs
@@ -1,12 +1,8 @@
 {-# LANGUAGE ConstraintKinds #-}
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE KindSignatures #-}
-{-# LANGUAGE TypeFamilies #-}
-#if __GLASGOW_HASKELL__ >= 800
 {-# LANGUAGE Safe #-}
-#else
-{-# LANGUAGE Trustworthy #-}
-#endif
+{-# LANGUAGE TypeFamilies #-}
 
 -- | This module provides type aliases that emulate the behavior of GHC's constraint
 -- tuple syntax. Unlike GHC's built-in constraint tuples, the type aliases in this
@@ -18,6 +14,8 @@
   ( -- * Constraint tuples
     CTuple0
   , CTuple1
+  , CUnit
+  , CSolo
   , CTuple2
   , CTuple3
   , CTuple4
@@ -79,17 +77,19 @@
   , CTuple60
   , CTuple61
   , CTuple62
+#if __GLASGOW_HASKELL__ >= 902
+  , CTuple63
+#endif
+#if __GLASGOW_HASKELL__ >= 902
+  , CTuple64
+#endif
   ) where
 
-import Data.Tuple.Constraint (CTuple1)
-#if __GLASGOW_HASKELL__ >= 800
+import Data.Tuple.Constraint (CTuple0, CTuple1, CSolo)
 import Data.Kind (Constraint)
-#else
-import GHC.Exts (Constraint)
-#endif
 
 -- | A type alias for a constraint tuple with 0 arguments.
-type CTuple0 = Decomposer0 (() :: Constraint)
+type CUnit = Decomposer0 (() :: Constraint)
 type family   Decomposer0 (x :: Constraint) :: Constraint
 type instance Decomposer0 (f ) = f
 
@@ -397,4 +397,18 @@
 type CTuple62 = Decomposer62 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
 type family   Decomposer62 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint
 type instance Decomposer62 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62) = f
+
+#if __GLASGOW_HASKELL__ >= 902
+-- | A type alias for a constraint tuple with 63 arguments.
+type CTuple63 = Decomposer63 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+type family   Decomposer63 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint
+type instance Decomposer63 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62 c63) = f
+#endif
+
+#if __GLASGOW_HASKELL__ >= 902
+-- | A type alias for a constraint tuple with 64 arguments.
+type CTuple64 = Decomposer64 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+type family   Decomposer64 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint
+type instance Decomposer64 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62 c63 c64) = f
+#endif
 
diff --git a/src/Data/Tuple/Constraint/TypeSynonym.hs b/src/Data/Tuple/Constraint/TypeSynonym.hs
--- a/src/Data/Tuple/Constraint/TypeSynonym.hs
+++ b/src/Data/Tuple/Constraint/TypeSynonym.hs
@@ -1,14 +1,12 @@
 {-# LANGUAGE ConstraintKinds #-}
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE KindSignatures #-}
-#if __GLASGOW_HASKELL__ >= 800
+{-# LANGUAGE Safe #-}
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE PolyKinds #-}
-# if __GLASGOW_HASKELL__ < 806
+#if __GLASGOW_HASKELL__ < 806
 {-# LANGUAGE TypeInType #-}
-# endif
 #endif
-{-# LANGUAGE Safe #-}
 
 -- | This module provides type aliases that emulate the behavior of GHC's constraint
 -- tuple syntax. Unlike GHC's built-in constraint tuples, the type aliases in this
@@ -16,15 +14,12 @@
 --
 -- The type aliases in this module are defined by way of type synonyms that
 -- decompose applications of constraint tuple type constructors to their arguments.
--- This requires the use of GHC capabilities that are only present on GHC 8.0 or
--- later, so this module does not export anything on earlier versions of GHC.
 module Data.Tuple.Constraint.TypeSynonym
-#if __GLASGOW_HASKELL__ < 800
-  () where
-#else
   ( -- * Constraint tuples
     CTuple0
   , CTuple1
+  , CUnit
+  , CSolo
   , CTuple2
   , CTuple3
   , CTuple4
@@ -86,14 +81,20 @@
   , CTuple60
   , CTuple61
   , CTuple62
+#if __GLASGOW_HASKELL__ >= 902
+  , CTuple63
+#endif
+#if __GLASGOW_HASKELL__ >= 902
+  , CTuple64
+#endif
   ) where
 
-import Data.Tuple.Constraint (CTuple1)
+import Data.Tuple.Constraint (CTuple0, CTuple1, CSolo)
 import Data.Kind (Constraint)
 import Data.Proxy (Proxy(..))
 
 -- | A type alias for a constraint tuple with 0 arguments.
-type CTuple0 = Decomposer0 ('Proxy :: Proxy (() :: Constraint))
+type CUnit = Decomposer0 ('Proxy :: Proxy (() :: Constraint))
 type Decomposer0 (x :: Proxy ((f :: Constraint) )) = f
 
 -- | A type alias for a constraint tuple with 2 arguments.
@@ -340,4 +341,15 @@
 type CTuple62 = Decomposer62 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
 type Decomposer62 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62)) = f
 
+#if __GLASGOW_HASKELL__ >= 902
+-- | A type alias for a constraint tuple with 63 arguments.
+type CTuple63 = Decomposer63 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+type Decomposer63 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62 c63)) = f
 #endif
+
+#if __GLASGOW_HASKELL__ >= 902
+-- | A type alias for a constraint tuple with 64 arguments.
+type CTuple64 = Decomposer64 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+type Decomposer64 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62 c63 c64)) = f
+#endif
+
