Imagine, we had a language extension for declaring subkinds of kind * where a subkind
declaration would be written as follows:

subkind K = C_1 => t_1 | ... | C_n => t_n

Thereby, K would be a kind identifier, the t_i would be types and the C_i would
be contexts. This subkind declaration would introduce a subkind K that covers all types
that match one of the t_i and fulfill the corresponding context. For example, the
declaration

subkind Map = (Ord key) => Map key val | IntMap val

would declare the subkind Map of all types whose values are maps. Note that the subkind Map
would be different from the type Map.

We will now see how a subkind declaration

subkind K = C_1 => t_1 | ... | C_n => t_n

can be emulated using this module. First, we declare a type KindK with a nullary data
constructor of the same name for representing the subkind. Then we add the following instance
declaration: