[][src]Module chalk_ir::fold

Traits for transforming bits of IR.

Re-exports

pub use self::shift::Shift;

Modules

shift

Shifting of debruijn indices

Structs

Subst

Substitution used during folding

Traits

Fold

Applies the given Folder to a value, producing a folded result of type Self::Result. The result type is typically the same as the source type, but in some cases we convert from borrowed to owned as well (e.g., the folder for &T will fold to a fresh T; well, actually T::Result).

Folder

A "folder" is a transformer that can be used to make a copy of some term -- that is, some bit of IR, such as a Goal -- with certain changes applied. The idea is that it contains methods that let you swap types/lifetimes for new types/lifetimes; meanwhile, each bit of IR implements the Fold trait which, given a Folder, will reconstruct itself, invoking the folder's methods to transform each of the types/lifetimes embedded within.

SuperFold

For types where "fold" invokes a callback on the Folder, the SuperFold trait captures the recursive behavior that folds all the contents of the type.