A De Bruijn index is a standard means of representing regions (and perhaps later types) in a higher-ranked setting. In particular, imagine a type like this:
An floating-point (
f64) type variable ID.
An integral (
usize, etc.) type variable ID.
A type variable ID.
Flags that we track on types. These flags are propagated upwards through the type during type construction, so that we can quickly check whether the type has various kinds of types in it without recursing over the type itself.
A placeholder for a type that hasn’t been inferred yet.