[][src]Struct chalk_solve::rust_ir::OpaqueTyDatum

pub struct OpaqueTyDatum<I: Interner> {
    pub opaque_ty_id: OpaqueTyId<I>,
    pub bound: Binders<OpaqueTyDatumBound<I>>,
}

Represents the bounds for an impl Trait type.

This example is not tested
opaque type T: A + B = HiddenTy;

Fields

opaque_ty_id: OpaqueTyId<I>

The placeholder !T that corresponds to the opaque type T.

bound: Binders<OpaqueTyDatumBound<I>>

The type bound to when revealed.

Trait Implementations

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

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

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

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

type Result = OpaqueTyDatum<_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: Hash + Interner> Hash for OpaqueTyDatum<I>[src]

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

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

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

impl<I: Interner> ToProgramClauses<I> for OpaqueTyDatum<I>[src]

fn to_program_clauses(
    &self,
    builder: &mut ClauseBuilder<'_, I>,
    _environment: &Environment<I>
)
[src]

Given opaque type T<U>: A + B = HiddenTy where U: C;, we generate:

AliasEq(T<U> = HiddenTy) :- Reveal.
AliasEq(T<U> = !T<U>).
WF(T<U>) :- WF(U: C).
Implemented(!T<U>: A).
Implemented(!T<U>: B).

where !T<..> is the placeholder for the unnormalized type T<..>.

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

Auto Trait Implementations

impl<I> RefUnwindSafe for OpaqueTyDatum<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 OpaqueTyDatum<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 OpaqueTyDatum<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 OpaqueTyDatum<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 OpaqueTyDatum<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]