[][src]Struct chalk_solve::rust_ir::FnDefDatumBound

pub struct FnDefDatumBound<I: Interner> {
    pub inputs_and_output: Binders<FnDefInputsAndOutputDatum<I>>,
    pub where_clauses: Vec<QuantifiedWhereClause<I>>,
}

Represents the bounds on a FnDefDatum, including the function definition's type signature and where clauses.

Fields

inputs_and_output: Binders<FnDefInputsAndOutputDatum<I>>

Inputs and outputs defined on a function These are needed for late-bound regions in rustc. For example the lifetime 'a in

This example is not tested
fn foo<'a, T>(&'a T);
       ^^

Rustc doesn't pass in late-bound the regions in substs, but the inputs and outputs may use them. where_clauses don't need an extra set of Binders, since any lifetimes found in where clauses are not late-bound.

For more information, see this rustc-dev-guide chapter.

where_clauses: Vec<QuantifiedWhereClause<I>>

Where clauses defined on the function

This example is not tested
fn foo<T>() where T: Eq;
            ^^^^^^^^^^^

Trait Implementations

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

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

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

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

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

type Interner = I

The interner associated with the type.

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

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

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

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

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

Auto Trait Implementations

impl<I> RefUnwindSafe for FnDefDatumBound<I> where
    <I as Interner>::DefId: RefUnwindSafe,
    <I as Interner>::InternedLifetime: RefUnwindSafe,
    <I as Interner>::InternedSubstitution: RefUnwindSafe,
    <I as Interner>::InternedType: RefUnwindSafe,
    <I as Interner>::InternedVariableKinds: RefUnwindSafe

impl<I> Send for FnDefDatumBound<I> where
    <I as Interner>::DefId: Send,
    <I as Interner>::InternedLifetime: Send,
    <I as Interner>::InternedSubstitution: Send,
    <I as Interner>::InternedType: Send,
    <I as Interner>::InternedVariableKinds: Send

impl<I> Sync for FnDefDatumBound<I> where
    <I as Interner>::DefId: Sync,
    <I as Interner>::InternedLifetime: Sync,
    <I as Interner>::InternedSubstitution: Sync,
    <I as Interner>::InternedType: Sync,
    <I as Interner>::InternedVariableKinds: Sync

impl<I> Unpin for FnDefDatumBound<I> where
    <I as Interner>::DefId: Unpin,
    <I as Interner>::InternedLifetime: Unpin,
    <I as Interner>::InternedSubstitution: Unpin,
    <I as Interner>::InternedType: Unpin,
    <I as Interner>::InternedVariableKinds: Unpin

impl<I> UnwindSafe for FnDefDatumBound<I> where
    <I as Interner>::DefId: UnwindSafe,
    <I as Interner>::InternedLifetime: UnwindSafe,
    <I as Interner>::InternedSubstitution: UnwindSafe,
    <I as Interner>::InternedType: 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<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.

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