[][src]Struct chalk_solve::rust_ir::GeneratorWitnessExistential

pub struct GeneratorWitnessExistential<I: Interner> {
    pub types: Binders<Vec<Ty<I>>>,
}

The generator witness types, together with existentially bound lifetimes. Each 'witness type' represents a type stored inside the generator across a yield. When a generator type is constructed, the precise region relationships found in the generator body are erased. As a result, we are left with existential lifetimes - each type is parameterized over some lifetimes, but we do not know their precise values.

Unlike the binder in GeneratorWitnessDatum, this Binder never gets substituted via an Ty. Instead, we handle this Binders specially when determining auto trait impls. See push_auto_trait_impls_generator_witness for more details.

Fields

types: Binders<Vec<Ty<I>>>

Trait Implementations

impl<I: Clone + Interner> Clone for GeneratorWitnessExistential<I>[src]

impl<I: Debug + Interner> Debug for GeneratorWitnessExistential<I>[src]

impl<I: Eq + Interner> Eq for GeneratorWitnessExistential<I>[src]

impl<I: Interner, _TI> Fold<I, _TI> for GeneratorWitnessExistential<I> where
    _TI: TargetInterner<I>, 
[src]

type Result = GeneratorWitnessExistential<_TI>

The type of value that will be produced once folding is done. Typically this is Self, unless Self contains borrowed values, in which case owned values are produced (for example, one can fold over a &T value where T: Fold, in which case you get back a T, not a &T). Read more

impl<I: Interner> HasInterner for GeneratorWitnessExistential<I>[src]

type Interner = I

The interner associated with the type.

impl<I: Hash + Interner> Hash for GeneratorWitnessExistential<I>[src]

impl<I: PartialEq + Interner> PartialEq<GeneratorWitnessExistential<I>> for GeneratorWitnessExistential<I>[src]

impl<I: Interner> StructuralEq for GeneratorWitnessExistential<I>[src]

impl<I: Interner> StructuralPartialEq for GeneratorWitnessExistential<I>[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Cast for T[src]

impl<Q, K> Equivalent<K> for Q where
    K: Borrow<Q> + ?Sized,
    Q: Eq + ?Sized
[src]

impl<T> From<T> for T[src]

impl<T> Instrument for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, I> Shift<I> for T where
    I: Interner,
    T: Fold<I, I>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.