The source of a particular trait implementation. Most often this is either Concrete for a
concrete impl Trait for Type {} item, or LocalBound for a context-bound where T: Trait.
Erase free regions from the given value. Largely copied from tcx.erase_and_anonymize_regions, but also
erases bound regions that are bound outside value, so we can call this function inside a
Binder.
Solve the trait obligations for a specific item use (for example, a method call, an ADT, etc.)
in the current context. Just like generic args include generics of parent items, this includes
impl exprs for parent items.
Given a clause clause in the context of some impl block impl_did, susbts correctly Self
from clause and (1) derive a Clause and (2) resolve an ImplExpr.
An ImplExpr describes the full data of a trait implementation. Because of generics, this may
need to combine several concrete trait implementation items. For example, ((1u8, 2u8), "hello").clone() combines the generic implementation of Clone for (A, B) with the
concrete implementations for u8 and &str, represented as a tree.