[][src]Struct chalk_ir::DynTy

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

A "DynTy" represents a trait object (dyn Trait). Trait objects are conceptually very related to an "existential type" of the form exists<T> { T: Trait } (another example of such type is impl Trait). DynTy represents the bounds on that type.

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

exists<type> {
   vec![
       // A QuantifiedWhereClause:
       forall<region> { ^1.0: Fn(&^0.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.0, indicating a bound type with debruijn index 1 (i.e., skipping through one level of binder).

Fields

bounds: Binders<QuantifiedWhereClauses<I>>

The unknown self type.

lifetime: Lifetime<I>

Lifetime of the DynTy.

Trait Implementations

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

impl<I: Interner> Copy for DynTy<I> where
    I::InternedLifetime: Copy,
    I::InternedQuantifiedWhereClauses: Copy,
    I::InternedVariableKinds: Copy
[src]

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

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

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

type Result = DynTy<I>

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

The interner associated with the type.

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>::InternedLifetime: RefUnwindSafe,
    <I as Interner>::InternedQuantifiedWhereClauses: RefUnwindSafe,
    <I as Interner>::InternedVariableKinds: RefUnwindSafe

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

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

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

impl<I> UnwindSafe for DynTy<I> where
    <I as Interner>::InternedLifetime: UnwindSafe,
    <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>, 
[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]