Encapsulates the concrete representation of core types such as types and goals.
Implemented by types that have an associated interner (which
are virtually all of the types in chalk-ir, for example).
This lets us map from a type like
Ty<I> to the parameter
A “interner” encapsulates the concrete representation of
certain “core types” from chalk-ir. All the types in chalk-ir are
parameterized by a
I: Interner, and so (e.g.) if they want to
store a type, they don’t store a
Ty<I> instance directly, but
rather prefer a
Ty<I>. You can think of
I::Type as the
interned representation (and, indeed, it may well be an interned
pointer, e.g. in rustc).