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 { ... } }

Required Associated Types§

Required Methods§

source

fn context(&mut self) -> &mut Self::Context

Provided Methods§

source

fn make(&mut self, typ: Type<Id, T>) -> T

source

fn make_types(&mut self, typ: impl IntoIterator<Item = T>) -> T::Types

source

fn visit(&mut self, typ: &T) -> Option<T>
where T: TypePtr<Id = Id> + Clone, Id: Clone, T::SpannedId: Clone,

source

fn forall(&mut self, params: T::Generics, typ: T) -> T

source

fn app(&mut self, id: T, args: T::Types) -> T

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<'i, F, V, Id, T> TypeVisitor<Id, T> for InternerVisitor<'i, ControlVisitation<F>, V>
where F: FnMut(&mut V, &T) -> Option<T>, Id: Clone, T::SpannedId: Clone, T: TypeExt<Id = Id>, V: TypeContext<Id, T>, T::Types: Clone, T::Generics: Clone, T::Fields: Clone,

§

type Context = V

source§

impl<'i, F, V, Id, T> TypeVisitor<Id, T> for InternerVisitor<'i, F, V>
where F: FnMut(&mut V, &T) -> Option<T>, Id: Clone, T::SpannedId: Clone, T: TypeExt<Id = Id, Types = AppVec<T>>, V: TypeContext<Id, T>, T::Generics: FromIterator<Generic<Id>> + Clone, T::Fields: FromIterator<Field<T::SpannedId, T>> + Clone,

§

type Context = V

source§

impl<F, Id, T> TypeVisitor<Id, T> for ControlVisitation<F>
where F: FnMut(&T) -> Option<T>, Id: Clone, T::SpannedId: Clone, T: TypeExt<Id = Id> + From<(Type<Id, T>, Flags)> + From<Type<Id, T>>, T::Types: FromIterator<T> + Clone, T::Generics: FromIterator<Generic<Id>> + Clone, T::Fields: FromIterator<Field<T::SpannedId, T>> + Clone,

source§

impl<F, Id, T> TypeVisitor<Id, T> for FlagsVisitor<F>
where F: FnMut(&T) -> Option<T>, Id: Clone, T::SpannedId: Clone, T: TypeExt<Id = Id> + From<(Type<Id, T>, Flags)> + From<Type<Id, T>>, T::Types: FromIterator<T> + Clone, T::Generics: FromIterator<Generic<Id>> + Clone, T::Fields: FromIterator<Field<T::SpannedId, T>> + Clone,

source§

impl<Id, T, F> TypeVisitor<Id, T> for F
where F: ?Sized + FnMut(&T) -> Option<T>, Id: Clone, T::SpannedId: Clone, T: TypeExt<Id = Id> + From<(Type<Id, T>, Flags)> + From<Type<Id, T>>, T::Types: FromIterator<T> + Clone, T::Generics: FromIterator<Generic<Id>> + Clone, T::Fields: FromIterator<Field<T::SpannedId, T>> + Clone,