Type-level variables. There are 4 kinds of variables at the type-level: regions, types, const
generics and trait clauses. The relevant definitions are in this module.
A value of type T bound by generic parameters. Used in any context where we’re adding generic
parameters that aren’t on the top-level item, e.g. for<'a> clauses (uses RegionBinder for
now), trait methods, GATs (TODO).
A stack of values corresponding to nested binders. Each binder introduces an entry in this
stack, with the entry as index 0 being the innermost binder. This is indexed by
DeBruijnIds.
Most methods assume that the stack is non-empty and panic if not.
A trait predicate in a signature, of the form Type: Trait<Args>. This functions like a
variable binder, to which variables of the form TraitRefKind::Clause can refer to.
The nature of locations where a given lifetime parameter is used. If this lifetime ever flows
to be used as the lifetime of a mutable reference &'a mut then we consider it mutable.
The metadata stored in a pointer. That’s the information stored in pointers alongside
their address. It’s empty for Sized types, and interesting for unsized
aka dynamically-sized types.