Trait TypeFolder

Source
pub trait TypeFolder<I: Interner>: Sized {
    // Required method
    fn cx(&self) -> I;

    // Provided methods
    fn fold_binder<T>(&mut self, t: Binder<I, T>) -> Binder<I, T>
       where T: TypeFoldable<I> { ... }
    fn fold_ty(&mut self, t: I::Ty) -> I::Ty { ... }
    fn fold_region(&mut self, r: I::Region) -> I::Region { ... }
    fn fold_const(&mut self, c: I::Const) -> I::Const { ... }
    fn fold_predicate(&mut self, p: I::Predicate) -> I::Predicate { ... }
}
Expand description

This trait is implemented for every infallible folding traversal. There is a fold method defined for every type of interest. Each such method has a default that does an “identity” fold. Implementations of these methods often fall back to a super_fold_with method if the primary argument doesn’t satisfy a particular condition.

A blanket implementation of FallibleTypeFolder will defer to the infallible methods of this trait to ensure that the two APIs are coherent.

Required Methods§

Source

fn cx(&self) -> I

Provided Methods§

Source

fn fold_binder<T>(&mut self, t: Binder<I, T>) -> Binder<I, T>
where T: TypeFoldable<I>,

Source

fn fold_ty(&mut self, t: I::Ty) -> I::Ty

Source

fn fold_region(&mut self, r: I::Region) -> I::Region

Source

fn fold_const(&mut self, c: I::Const) -> I::Const

Source

fn fold_predicate(&mut self, p: I::Predicate) -> I::Predicate

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<'a, I: Interner> TypeFolder<I> for ArgFolder<'a, I>

Source§

impl<I, F> TypeFolder<I> for RegionFolder<I, F>
where I: Interner, F: FnMut(I::Region, DebruijnIndex) -> I::Region,

Source§

impl<I: Interner> TypeFolder<I> for Shifter<I>

Source§

impl<I: Interner> TypeFolder<I> for FoldEscapingRegions<I>