pub trait Folder<'a> {
type NodeTy: Node;
type Out;
type Context: Clone;
// Required method
fn visit_up(
&mut self,
node: &'a Self::NodeTy,
context: Self::Context,
children: Vec<Self::Out>,
) -> VortexResult<FoldUp<Self::Out>>;
// Provided method
fn visit_down(
&mut self,
_node: &'a Self::NodeTy,
context: Self::Context,
) -> VortexResult<FoldDown<Self::Out, Self::Context>> { ... }
}