[][src]Struct chalk_ir::TraitRef

pub struct TraitRef<I: Interner> {
    pub trait_id: TraitId<I>,
    pub substitution: Substitution<I>,
}

A trait reference describes the relationship between a type and a trait. This can be used in two forms:

  • P0: Trait<P1..Pn> (e.g. i32: Copy), which mentions that the type implements the trait.
  • <P0 as Trait<P1..Pn>> (e.g. i32 as Copy), which casts the type to that specific trait.

Fields

trait_id: TraitId<I>

The trait id.

substitution: Substitution<I>

The substitution, containing both the Self type and the parameters.

Implementations

impl<I: Interner> TraitRef<I>[src]

pub fn with_as(&self) -> impl Debug + '_[src]

Returns a "Debuggable" type that prints like P0 as Trait<P1..>.

pub fn with_colon(&self) -> impl Debug + '_[src]

Returns a "Debuggable" type that prints like P0: Trait<P1..>.

impl<I: Interner> TraitRef<I>[src]

pub fn type_parameters<'a>(
    &'a self,
    interner: &'a I
) -> impl Iterator<Item = Ty<I>> + 'a
[src]

Gets all type parameters in this trait ref, including Self.

pub fn self_type_parameter(&self, interner: &I) -> Ty<I>[src]

Gets the type parameters of the Self type in this trait ref.

pub fn from_env(self) -> FromEnv<I>[src]

Construct a FromEnv using this trait ref.

pub fn well_formed(self) -> WellFormed<I>[src]

Construct a WellFormed using this trait ref.

Trait Implementations

impl<I: Interner> CastTo<TraitRef<I>> for TraitRef<I>[src]

impl<I: Interner> CastTo<WhereClause<I>> for TraitRef<I>[src]

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

impl<I: Interner> Copy for TraitRef<I> where
    I::InternedSubstitution: Copy
[src]

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

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

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

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

type Interner = I

The interner associated with the type.

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

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

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

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

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

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

Auto Trait Implementations

impl<I> RefUnwindSafe for TraitRef<I> where
    <I as Interner>::DefId: RefUnwindSafe,
    <I as Interner>::InternedSubstitution: RefUnwindSafe

impl<I> Send for TraitRef<I> where
    <I as Interner>::DefId: Send,
    <I as Interner>::InternedSubstitution: Send

impl<I> Sync for TraitRef<I> where
    <I as Interner>::DefId: Sync,
    <I as Interner>::InternedSubstitution: Sync

impl<I> Unpin for TraitRef<I> where
    <I as Interner>::DefId: Unpin,
    <I as Interner>::InternedSubstitution: Unpin

impl<I> UnwindSafe for TraitRef<I> where
    <I as Interner>::DefId: UnwindSafe,
    <I as Interner>::InternedSubstitution: 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> CastTo<DomainGoal<I>> for T where
    I: Interner,
    T: CastTo<WhereClause<I>>, 
[src]

impl<T, I> CastTo<Goal<I>> for T where
    I: Interner,
    T: CastTo<DomainGoal<I>>, 
[src]

impl<T, I> CastTo<ProgramClause<I>> for T where
    I: Interner,
    T: CastTo<DomainGoal<I>>, 
[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]