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

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 Fwhere 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,