Like add_builtin_program_clauses
, but for DomainGoal::Normalize
involving
a projection (e.g. <fn(u8) as FnOnce<(u8,)>>::Output
)
For well known traits we have special hard-coded impls, either as an
optimization or to enforce special rules for correctness.
Returns type of the last field of the input struct, which is useful for Sized
and related
traits. Returns None
if the input is not a struct or it has no fields.
Given a trait ref T0: Trait
and a list of types U0..Un
, pushes a clause of the form
Implemented(T0: Trait) :- Implemented(U0: Trait) .. Implemented(Un: Trait)