"Higher-kinded types" is a vague term, conflating multiple language features under a single banner, which can be inaccurate.
As background, this RFC includes a brief overview of the notion of kinds and kindedness. Kinds are often called 'the type of a type,' the exact sort of unhelpful description that only makes sense to someone who already understands what is being explained. Instead, let's try to understand kinds by analogy to types.
In a well-typed language, every expression has a type. Many expressions have what are sometimes called 'base types,' types which are primitive to the language and which cannot be described in terms of other types. In Rust, the types bool
, i64
, usize
, and char
are all prominent examples of base types.
In contrast, there are types which are formed by arranging other types - functions are a good example of this. Consider this simple function:
fn not(x: bool) -> bool {