pub trait TypeVisitor<Id, T>where
T: TypePtr<Id = Id>,
T::Types: Clone,
T::Generics: Clone,
T::Fields: Clone,
T::TypeFields: Clone,{
type Context: TypeContext<Id, T>;
// Required method
fn context(&mut self) -> &mut Self::Context;
// Provided methods
fn make(&mut self, typ: Type<Id, T>) -> T { ... }
fn make_types(&mut self, typ: impl IntoIterator<Item = T>) -> T::Types { ... }
fn visit(&mut self, typ: &T) -> Option<T>
where T: TypePtr<Id = Id> + Clone,
Id: Clone,
T::SpannedId: Clone { ... }
fn forall(&mut self, params: T::Generics, typ: T) -> T { ... }
fn app(&mut self, id: T, args: T::Types) -> T { ... }
}