Trait rustc_infer::infer::canonical::CanonicalExt
source · pub trait CanonicalExt<'tcx, V> {
// Required methods
fn substitute(
&self,
tcx: TyCtxt<'tcx>,
var_values: &CanonicalVarValues<'tcx>
) -> V
where V: TypeFoldable<TyCtxt<'tcx>>;
fn substitute_projected<T>(
&self,
tcx: TyCtxt<'tcx>,
var_values: &CanonicalVarValues<'tcx>,
projection_fn: impl FnOnce(&V) -> T
) -> T
where T: TypeFoldable<TyCtxt<'tcx>>;
}
Expand description
FIXME(-Ztrait-solver=next): This or public because it is shared with the new trait solver implementation. We should deduplicate canonicalization.
Required Methods§
sourcefn substitute(
&self,
tcx: TyCtxt<'tcx>,
var_values: &CanonicalVarValues<'tcx>
) -> Vwhere
V: TypeFoldable<TyCtxt<'tcx>>,
fn substitute( &self, tcx: TyCtxt<'tcx>, var_values: &CanonicalVarValues<'tcx> ) -> Vwhere V: TypeFoldable<TyCtxt<'tcx>>,
Instantiate the wrapped value, replacing each canonical value
with the value given in var_values
.
sourcefn substitute_projected<T>(
&self,
tcx: TyCtxt<'tcx>,
var_values: &CanonicalVarValues<'tcx>,
projection_fn: impl FnOnce(&V) -> T
) -> Twhere
T: TypeFoldable<TyCtxt<'tcx>>,
fn substitute_projected<T>( &self, tcx: TyCtxt<'tcx>, var_values: &CanonicalVarValues<'tcx>, projection_fn: impl FnOnce(&V) -> T ) -> Twhere T: TypeFoldable<TyCtxt<'tcx>>,
Allows one to apply a substitute to some subset of
self.value
. Invoke projection_fn
with self.value
to get
a value V that is expressed in terms of the same canonical
variables bound in self
(usually this extracts from subset
of self
). Apply the substitution var_values
to this value
V, replacing each of the canonical variables.