- tyConTyVars :: [TyVar], -- ^ The type variables used in the type constructor.
- -- Precisely, this list scopes over:
- --
- -- 1. The 'algTcStupidTheta'
- --
- -- 2. The cached types in 'algTyConRhs.NewTyCon'
- --
- -- 3. The family instance types if present
- --
- -- Note that it does /not/ scope over the data constructors.
-
- algTcGadtSyntax :: Bool, -- ^ Was the data type declared with GADT syntax? If so,
- -- that doesn't mean it's a true GADT; only that the "where"
- -- form was used. This field is used only to guide
- -- pretty-printing
-
- algTcStupidTheta :: [PredType], -- ^ The \"stupid theta\" for the data type (always empty for GADTs).
- -- A \"stupid theta\" is the context to the left of an algebraic type
- -- declaration, e.g. @Eq a@ in the declaration @data Eq a => T a ...@.
-
- algTcRhs :: AlgTyConRhs, -- ^ Contains information about the data constructors of the algebraic type
-
- algTcRec :: RecFlag, -- ^ Tells us whether the data type is part of a mutually-recursive group or not
-
- hasGenerics :: Bool, -- ^ Whether generic (in the -XGenerics sense) to\/from functions are
- -- available in the exports of the data type's source module.
-
- algTcParent :: TyConParent -- ^ Gives the class or family declaration 'TyCon' for derived 'TyCon's
- -- representing class or family instances, respectively. See also 'synTcParent'
+ tyConTyVars :: [TyVar], -- ^ The type variables used in the type constructor.
+ -- Invariant: length tyvars = arity
+ -- Precisely, this list scopes over:
+ --
+ -- 1. The 'algTcStupidTheta'
+ -- 2. The cached types in 'algTyConRhs.NewTyCon'
+ -- 3. The family instance types if present
+ --
+ -- Note that it does /not/ scope over the data constructors.
+
+ algTcGadtSyntax :: Bool, -- ^ Was the data type declared with GADT syntax?
+ -- If so, that doesn't mean it's a true GADT;
+ -- only that the "where" form was used.
+ -- This field is used only to guide pretty-printing
+
+ algTcStupidTheta :: [PredType], -- ^ The \"stupid theta\" for the data type
+ -- (always empty for GADTs).
+ -- A \"stupid theta\" is the context to the left
+ -- of an algebraic type declaration,
+ -- e.g. @Eq a@ in the declaration
+ -- @data Eq a => T a ...@.
+
+ algTcRhs :: AlgTyConRhs, -- ^ Contains information about the
+ -- data constructors of the algebraic type
+
+ algTcRec :: RecFlag, -- ^ Tells us whether the data type is part
+ -- of a mutually-recursive group or not
+
+ hasGenerics :: Bool, -- ^ Whether generic (in the -XGenerics sense)
+ -- to\/from functions are available in the exports
+ -- of the data type's source module.
+
+ algTcParent :: TyConParent -- ^ Gives the class or family declaration 'TyCon'
+ -- for derived 'TyCon's representing class
+ -- or family instances, respectively.
+ -- See also 'synTcParent'