pub trait PredicateEmittingRelation<Infcx, I = I>: TypeRelation<I>
where Infcx: InferCtxtLike<Interner = I>, I: Interner,
{ // Required methods fn span(&self) -> <I as Interner>::Span; fn param_env(&self) -> <I as Interner>::ParamEnv; fn structurally_relate_aliases(&self) -> StructurallyRelateAliases; fn register_goals( &mut self, obligations: impl IntoIterator<Item = Goal<I, <I as Interner>::Predicate>>, ); fn register_predicates( &mut self, obligations: impl IntoIterator>, ) where <impl IntoIterator as IntoIterator>::Item: Upcast<I, <I as Interner>::Predicate>; fn register_alias_relate_predicate( &mut self, a: <I as Interner>::Ty, b: <I as Interner>::Ty, ); }

Required Methods§

source

fn span(&self) -> <I as Interner>::Span

source

fn param_env(&self) -> <I as Interner>::ParamEnv

source

fn structurally_relate_aliases(&self) -> StructurallyRelateAliases

Whether aliases should be related structurally. This is pretty much always No unless you’re equating in some specific locations of the new solver. See the comments in these use-cases for more details.

source

fn register_goals( &mut self, obligations: impl IntoIterator<Item = Goal<I, <I as Interner>::Predicate>>, )

Register obligations that must hold in order for this relation to hold

source

fn register_predicates( &mut self, obligations: impl IntoIterator>, )
where <impl IntoIterator as IntoIterator>::Item: Upcast<I, <I as Interner>::Predicate>,

Register predicates that must hold in order for this relation to hold. This uses the default param_env of the obligation.

source

fn register_alias_relate_predicate( &mut self, a: <I as Interner>::Ty, b: <I as Interner>::Ty, )

Register AliasRelate obligation(s) that both types must be related to each other.

Object Safety§

This trait is not object safe.

Implementors§