Skip to content

Make DataKinds the sole arbiter of kind-level literals (and friends)

Ryan Scott requested to merge wip/T18831 into master

Previously, the use of kind-level literals, promoted tuples, and promoted lists required enabling both DataKinds and PolyKinds. This made sense back in a TypeInType world, but not so much now that TypeInType's role has been superseded. Nowadays, PolyKinds only controls kind polymorphism, so let's make DataKinds the thing that controls the other aspects of TypeInType, which include literals, promoted tuples and promoted lists.

There are some other things that overzealously required PolyKinds, which this patch fixes as well:

  • Previously, using constraints in kinds (e.g., data T :: () -> Type) required PolyKinds, despite the fact that this is orthogonal to kind polymorphism. This now requires DataKinds instead.
  • Previously, using kind annotations in kinds (e.g., data T :: (Type :: Type) -> Type) required both KindSignatures and PolyKinds. This doesn't make much sense, so it only requires KindSignatures now.

Fixes #18831 (closed).

Merge request reports