[][src]Struct chalk_ir::DynTy

pub struct DynTy<I: Interner> {
    pub bounds: Binders<QuantifiedWhereClauses<I>>,
}

A "DynTy" could be either a dyn Trait or an (opaque) impl Trait. Both of them are conceptually very related to a "existential type" of the form exists<T> { T: Trait }. The DynTy type represents those bounds.

The "binder" here represents the unknown self type. So, a type like impl for<'a> Fn(&'a u32) would be represented with two-levels of binder, as "depicted" here:

exists<type> {
   vec![
       // A QuantifiedWhereClause:
       forall<region> { ^1: Fn(&^0 u32) }
   ]
}

The outer exists<type> binder indicates that there exists some type that meets the criteria within, but that type is not known. It is referenced within the type using ^1, indicating a bound type with debruijn index 1 (i.e., skipping through one level of binder).

Fields

bounds: Binders<QuantifiedWhereClauses<I>>

Trait Implementations

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

impl<I: Interner> Debug for DynTy<I>[src]

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

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

type Result = DynTy<_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 DynTy<I>[src]

type Interner = I

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

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

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

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

impl<I: Interner> Visit<I> for DynTy<I>[src]

impl<I: Interner> Zip<I> for DynTy<I>[src]

Auto Trait Implementations

impl<I> RefUnwindSafe for DynTy<I> where
    <I as Interner>::InternedQuantifiedWhereClauses: RefUnwindSafe,
    <I as Interner>::InternedVariableKinds: RefUnwindSafe

impl<I> Send for DynTy<I> where
    <I as Interner>::InternedQuantifiedWhereClauses: Send,
    <I as Interner>::InternedVariableKinds: Send

impl<I> Sync for DynTy<I> where
    <I as Interner>::InternedQuantifiedWhereClauses: Sync,
    <I as Interner>::InternedVariableKinds: Sync

impl<I> Unpin for DynTy<I> where
    <I as Interner>::InternedQuantifiedWhereClauses: Unpin,
    <I as Interner>::InternedVariableKinds: Unpin

impl<I> UnwindSafe for DynTy<I> where
    <I as Interner>::InternedQuantifiedWhereClauses: UnwindSafe,
    <I as Interner>::InternedVariableKinds: UnwindSafe

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<T, I> CouldMatch<T> for T where
    I: Interner,
    T: Zip<I> + HasInterner<Interner = I> + ?Sized
[src]

impl<T> From<T> 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.

impl<T, I> VisitExt<I> for T where
    I: Interner,
    T: Visit<I>, 
[src]