pub trait TypeVisitor<D: TypeData> {
// Required method
fn map_types<F: FnMut(D::Meta, &TypeKind<D>, TypesBuf<D>) -> Type<D>>(
&self,
f: F,
) -> Self
where Self: Sized;
// Provided method
fn map_constr<F: FnMut(D::Meta, &TypeKind<D>) -> TypeKind<D>>(
&self,
f: F,
) -> Self
where Self: Sized { ... }
}