[][src]Trait gluon_base::types::TypeVisitor

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>; fn context(&mut self) -> &mut Self::Context; 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 { ... } }

Associated Types

type Context: TypeContext<Id, T>

Loading content...

Required methods

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

Loading content...

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

Loading content...

Implementors

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
[src]

type Context = V

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
[src]

type Context = V

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
[src]

type Context = NullInterner

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
[src]

type Context = NullInterner

impl<Id, T, F: ?Sized> TypeVisitor<Id, T> for 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
[src]

type Context = NullInterner

Loading content...