To make the correspondence clear, a type constructor for the Cartesian product is typically added to the above.
Kinds appear explicitly in typeful programming, such as a type constructor in the Haskell language.
New, more structured data types are built using type constructors.
The most basic type constructor forms the union of two predefined types.
New types can be defined by recursively composing type constructors.
Depending on the variance of the type constructor, the subtyping relation may be either preserved, reversed, or ignored.
By making type constructors covariant or contravariant instead of invariant, more programs will be accepted as well-typed.
In Haskell's notation, the name of the monad represents the type constructor.
Data families, on the other hand, restrict the codomain by requiring each instance to define a new type constructor for the function's result.
The system of second order dependent types is obtained from by allowing quantification over type constructors.