[−][src]Struct chalk_ir::BoundVar
Identifies a particular bound variable within a binder.
Variables are identified by the combination of a DebruijnIndex,
which identifies the binder, and an index within that binder.
Consider this case:
forall<'a, 'b> { forall<'c, 'd> { ... } }
Within the ... term:
- the variable
'ahave a debruijn index of 1 and index 0 - the variable
'bhave a debruijn index of 1 and index 1 - the variable
'chave a debruijn index of 0 and index 0 - the variable
'dhave a debruijn index of 0 and index 1
The variables 'a and 'b both have debruijn index of 1 because,
counting out, they are the 2nd binder enclosing .... The indices
identify the location within that binder.
The variables 'c and 'd both have debruijn index of 0 because
they appear in the innermost binder enclosing the .... The
indices identify the location within that binder.
Fields
debruijn: DebruijnIndexDebruijn index, which identifies the binder.
index: usizeIndex within the binder.
Implementations
impl BoundVar[src]
pub fn new(debruijn: DebruijnIndex, index: usize) -> Self[src]
Creates a new bound variable.
pub fn to_ty<I: Interner>(self, interner: &I) -> Ty<I>[src]
Casts the bound variable to a type.
pub fn to_lifetime<I: Interner>(self, interner: &I) -> Lifetime<I>[src]
Wrap the bound variable in a lifetime.
pub fn to_const<I: Interner>(self, interner: &I, ty: Ty<I>) -> Const<I>[src]
Wraps the bound variable in a constant.
pub fn bound_within(self, outer_binder: DebruijnIndex) -> bool[src]
True if this variable is bound within the amount innermost binders.
#[must_use]pub fn shifted_in(self) -> Self[src]
Adjusts the debruijn index (see DebruijnIndex::shifted_in).
#[must_use]pub fn shifted_in_from(self, outer_binder: DebruijnIndex) -> Self[src]
Adjusts the debruijn index (see DebruijnIndex::shifted_in).
#[must_use]pub fn shifted_out(self) -> Option<Self>[src]
Adjusts the debruijn index (see DebruijnIndex::shifted_in).
#[must_use]pub fn shifted_out_to(self, outer_binder: DebruijnIndex) -> Option<Self>[src]
Adjusts the debruijn index (see DebruijnIndex::shifted_in).
pub fn index_if_innermost(self) -> Option<usize>[src]
Return the index of the bound variable, but only if it is bound
at the innermost binder. Otherwise, returns None.
pub fn index_if_bound_at(self, debruijn: DebruijnIndex) -> Option<usize>[src]
Return the index of the bound variable, but only if it is bound
at the innermost binder. Otherwise, returns None.
Trait Implementations
impl Clone for BoundVar[src]
impl Copy for BoundVar[src]
impl Debug for BoundVar[src]
impl Eq for BoundVar[src]
impl Hash for BoundVar[src]
fn hash<__H: Hasher>(&self, state: &mut __H)[src]
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher, 1.3.0[src]
H: Hasher,
impl Ord for BoundVar[src]
fn cmp(&self, other: &BoundVar) -> Ordering[src]
#[must_use]fn max(self, other: Self) -> Self1.21.0[src]
#[must_use]fn min(self, other: Self) -> Self1.21.0[src]
#[must_use]fn clamp(self, min: Self, max: Self) -> Self[src]
impl PartialEq<BoundVar> for BoundVar[src]
impl PartialOrd<BoundVar> for BoundVar[src]
fn partial_cmp(&self, other: &BoundVar) -> Option<Ordering>[src]
fn lt(&self, other: &BoundVar) -> bool[src]
fn le(&self, other: &BoundVar) -> bool[src]
fn gt(&self, other: &BoundVar) -> bool[src]
fn ge(&self, other: &BoundVar) -> bool[src]
impl StructuralEq for BoundVar[src]
impl StructuralPartialEq for BoundVar[src]
Auto Trait Implementations
impl RefUnwindSafe for BoundVar
impl Send for BoundVar
impl Sync for BoundVar
impl Unpin for BoundVar
impl UnwindSafe for BoundVar
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T[src]
impl<T> Cast for T[src]
fn cast<U>(self, interner: &U::Interner) -> U where
Self: CastTo<U>,
U: HasInterner, [src]
Self: CastTo<U>,
U: HasInterner,
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone, [src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T[src]
fn clone_into(&self, target: &mut T)[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,