Trait rustc_trait_selection::infer::canonical::CanonicalExt
source · pub trait CanonicalExt<'tcx, V> {
// Required methods
fn instantiate(
&self,
tcx: TyCtxt<'tcx>,
var_values: &CanonicalVarValues<TyCtxt<'tcx>>,
) -> V
where V: TypeFoldable<TyCtxt<'tcx>>;
fn instantiate_projected<T>(
&self,
tcx: TyCtxt<'tcx>,
var_values: &CanonicalVarValues<TyCtxt<'tcx>>,
projection_fn: impl FnOnce(&V) -> T,
) -> T
where T: TypeFoldable<TyCtxt<'tcx>>;
}
Expand description
FIXME(-Znext-solver): This or public because it is shared with the new trait solver implementation. We should deduplicate canonicalization.
Required Methods§
sourcefn instantiate(
&self,
tcx: TyCtxt<'tcx>,
var_values: &CanonicalVarValues<TyCtxt<'tcx>>,
) -> Vwhere
V: TypeFoldable<TyCtxt<'tcx>>,
fn instantiate(
&self,
tcx: TyCtxt<'tcx>,
var_values: &CanonicalVarValues<TyCtxt<'tcx>>,
) -> Vwhere
V: TypeFoldable<TyCtxt<'tcx>>,
Instantiate the wrapped value, replacing each canonical value
with the value given in var_values
.
sourcefn instantiate_projected<T>(
&self,
tcx: TyCtxt<'tcx>,
var_values: &CanonicalVarValues<TyCtxt<'tcx>>,
projection_fn: impl FnOnce(&V) -> T,
) -> Twhere
T: TypeFoldable<TyCtxt<'tcx>>,
fn instantiate_projected<T>(
&self,
tcx: TyCtxt<'tcx>,
var_values: &CanonicalVarValues<TyCtxt<'tcx>>,
projection_fn: impl FnOnce(&V) -> T,
) -> Twhere
T: TypeFoldable<TyCtxt<'tcx>>,
Allows one to apply a instantiation 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 instantiation var_values
to this value
V, replacing each of the canonical variables.
Object Safety§
This trait is not object safe.