pub trait CanonicalExt<'tcx, V> {
// Required methods
fn instantiate(
&self,
tcx: TyCtxt<'tcx>,
var_values: &CanonicalVarValues<'tcx>,
) -> V
where V: TypeFoldable<TyCtxt<'tcx>>;
fn instantiate_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(-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<'tcx>,
) -> Vwhere
V: TypeFoldable<TyCtxt<'tcx>>,
fn instantiate(
&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 instantiate_projected<T>(
&self,
tcx: TyCtxt<'tcx>,
var_values: &CanonicalVarValues<'tcx>,
projection_fn: impl FnOnce(&V) -> T,
) -> Twhere
T: TypeFoldable<TyCtxt<'tcx>>,
fn instantiate_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 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.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.