Expand description

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 I.

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).