# Type Alias rustc_infer::infer::canonical::Canonical

source ·

    pub type Canonical<'tcx, V> = Canonical<TyCtxt<'tcx>, V>;

## Aliased Type§

    struct Canonical<'tcx, V> {
        pub value: V,
        pub max_universe: UniverseIndex,
        pub defining_opaque_types: &'tcx RawList<(), LocalDefId>,
        pub variables: &'tcx RawList<(), CanonicalVarInfo<TyCtxt<'tcx>>>,
    }

## Fields§

§`value: V`§`max_universe: UniverseIndex`§`defining_opaque_types: &'tcx RawList<(), LocalDefId>`§`variables: &'tcx RawList<(), CanonicalVarInfo<TyCtxt<'tcx>>>`

## Trait Implementations§

source§

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

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.

## Layout§

Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.