[][src]Struct chalk_ir::Substitution

pub struct Substitution<I: Interner> { /* fields omitted */ }

A mapping of inference variables to instantiations thereof.

Implementations

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

pub fn debug<'a>(&'a self, interner: &'a I) -> SubstitutionDebug<'a, I>[src]

Show debug output for the substitution.

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

pub fn with_angle(&self, interner: &I) -> Angle<GenericArg<I>>[src]

Displays the substitution in the form < P0, .. Pn >, or (if the substitution is empty) as an empty string.

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

pub fn from(
    interner: &I,
    parameters: impl IntoIterator<Item = impl CastTo<GenericArg<I>>>
) -> Self
[src]

Create a substitution from parameters.

pub fn from_fallible<E>(
    interner: &I,
    parameters: impl IntoIterator<Item = Result<impl CastTo<GenericArg<I>>, E>>
) -> Result<Self, E>
[src]

Try to create a substitution from parameters.

pub fn interned(&self) -> &I::InternedSubstitution[src]

Get the interned representation of the substitution.

pub fn at(&self, interner: &I, index: usize) -> &GenericArg<I>[src]

Index into the list of parameters.

pub fn from1(interner: &I, parameter: impl CastTo<GenericArg<I>>) -> Self[src]

Create a substitution from a single parameter.

pub fn empty(interner: &I) -> Self[src]

Create an empty substitution.

pub fn is_empty(&self, interner: &I) -> bool[src]

Check whether this is an empty substitution.

pub fn iter(&self, interner: &I) -> Iter<GenericArg<I>>[src]

Get an iterator over the parameters of the substitution.

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

Get the parameters associated with a substitution.

pub fn len(&self, interner: &I) -> usize[src]

Get the length of the substitution (number of parameters).

pub fn is_identity_subst(&self, interner: &I) -> bool[src]

A substitution is an identity substitution if it looks like this

?0 := ?0
?1 := ?1
?2 := ?2
...

Basically, each value is mapped to a type or lifetime with its same index.

pub fn apply<T>(&self, value: &T, interner: &I) -> T::Result where
    T: Fold<I, I>, 
[src]

Apply the substitution to a value.

Trait Implementations

impl<I: Interner> AsParameters<I> for Substitution<I>[src]

impl<I: Clone + Interner> Clone for Substitution<I> where
    I::InternedSubstitution: Clone
[src]

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

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

impl<I: Interner> Display for Substitution<I>[src]

impl<I: Eq + Interner> Eq for Substitution<I> where
    I::InternedSubstitution: Eq
[src]

impl<I: Interner, TI: TargetInterner<I>> Fold<I, TI> for Substitution<I>[src]

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

type Interner = I

The interner associated with the type.

impl<I: Hash + Interner> Hash for Substitution<I> where
    I::InternedSubstitution: Hash
[src]

impl<I: PartialEq + Interner> PartialEq<Substitution<I>> for Substitution<I> where
    I::InternedSubstitution: PartialEq
[src]

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

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

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

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

Auto Trait Implementations

impl<I> RefUnwindSafe for Substitution<I> where
    <I as Interner>::InternedSubstitution: RefUnwindSafe

impl<I> Send for Substitution<I> where
    <I as Interner>::InternedSubstitution: Send

impl<I> Sync for Substitution<I> where
    <I as Interner>::InternedSubstitution: Sync

impl<I> Unpin for Substitution<I> where
    <I as Interner>::InternedSubstitution: Unpin

impl<I> UnwindSafe for Substitution<I> where
    <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> 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> ToString for T where
    T: Display + ?Sized
[src]

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]