Trait rustc_type_ir::fold::TypeFoldable
source · pub trait TypeFoldable<I: Interner>: TypeVisitable<I> {
// Required method
fn try_fold_with<F: FallibleTypeFolder<I>>(
self,
folder: &mut F
) -> Result<Self, F::Error>;
// Provided method
fn fold_with<F: TypeFolder<I>>(self, folder: &mut F) -> Self { ... }
}Expand description
This trait is implemented for every type that can be folded, providing the skeleton of the traversal.
To implement this conveniently, use the derive macro located in
rustc_macros.
Required Methods§
sourcefn try_fold_with<F: FallibleTypeFolder<I>>(
self,
folder: &mut F
) -> Result<Self, F::Error>
fn try_fold_with<F: FallibleTypeFolder<I>>( self, folder: &mut F ) -> Result<Self, F::Error>
The entry point for folding. To fold a value t with a folder f
call: t.try_fold_with(f).
For most types, this just traverses the value, calling try_fold_with
on each field/element.
For types of interest (such as Ty), the implementation of method
calls a folder method specifically for that type (such as
F::try_fold_ty). This is where control transfers from TypeFoldable
to TypeFolder.
Provided Methods§
sourcefn fold_with<F: TypeFolder<I>>(self, folder: &mut F) -> Self
fn fold_with<F: TypeFolder<I>>(self, folder: &mut F) -> Self
A convenient alternative to try_fold_with for use with infallible
folders. Do not override this method, to ensure coherence with
try_fold_with.