rustc_infer::infer::canonical

Trait CanonicalExt

source
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§

source

fn instantiate( &self, tcx: TyCtxt<'tcx>, var_values: &CanonicalVarValues<'tcx>, ) -> V
where V: TypeFoldable<TyCtxt<'tcx>>,

Instantiate the wrapped value, replacing each canonical value with the value given in var_values.

source

fn instantiate_projected<T>( &self, tcx: TyCtxt<'tcx>, var_values: &CanonicalVarValues<'tcx>, projection_fn: impl FnOnce(&V) -> T, ) -> T
where 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.

Implementors§

source§

impl<'tcx, V> CanonicalExt<'tcx, V> for Canonical<'tcx, V>