Binder is a binder for higher-ranked lifetimes or types. It is part of the
compiler’s representation for things like for<'a> Fn(&'a isize)
(which would be represented by the type PolyTraitRef == Binder<I, TraitRef>).
Similar to Binder except that it tracks early bound generics, i.e. struct Foo<T>(T)
needs T instantiated immediately. This type primarily exists to avoid forgetting to call
instantiate.
The “placeholder index” fully defines a placeholder region, type, or const. Placeholders are
identified by both a universe, as well as a name residing within that universe. Distinct bound
regions/types/consts within the same universe simply have an unknown relationship to one
another.
Okay, we do something fun for Bound types/regions/consts:
Specifically, we distinguish between canonically bound things and
for<> bound things. And, really, it comes down to caching during
canonicalization and instantiation.