pub trait TypeContext<Id, T>
where T: TypePtr<Id = Id>,
{
Show 47 methods // Required methods fn intern_flags(&mut self, typ: Type<Id, T>, flags: Flags) -> T; fn intern(&mut self, typ: Type<Id, T>) -> T; fn intern_types(&mut self, types: impl IntoIterator<Item = T>) -> T::Types; fn intern_generics( &mut self, types: impl IntoIterator<Item = Generic<Id>> ) -> T::Generics; fn intern_fields( &mut self, types: impl IntoIterator<Item = Field<T::SpannedId, T>> ) -> T::Fields; fn intern_type_fields( &mut self, types: impl IntoIterator<Item = Field<T::SpannedId, Alias<Id, T>>> ) -> T::TypeFields; // Provided methods fn hole(&mut self) -> T { ... } fn opaque(&mut self) -> T { ... } fn error(&mut self) -> T { ... } fn builtin(&mut self, typ: BuiltinType) -> T { ... } fn forall(&mut self, params: T::Generics, typ: T) -> T { ... } fn with_forall(&mut self, typ: T, from: &T) -> T where Id: Clone + Eq + Hash, T: TypeExt<Id = Id> + Clone, T::Generics: FromIterator<Generic<Id>> + Clone { ... } fn array(&mut self, typ: T) -> T { ... } fn array_builtin(&mut self) -> T { ... } fn app(&mut self, id: T, args: T::Types) -> T { ... } fn variant(&mut self, fields: T::Fields) -> T { ... } fn poly_variant(&mut self, fields: T::Fields, rest: T) -> T { ... } fn effect(&mut self, fields: T::Fields) -> T { ... } fn poly_effect(&mut self, fields: T::Fields, rest: T) -> T { ... } fn tuple<S, I>(&mut self, symbols: &mut S, elems: I) -> T where S: ?Sized + IdentEnv<Ident = Id>, T::SpannedId: From<(Id, Span<BytePos>)>, I: IntoIterator<Item = T>, T: HasSpan { ... } fn tuple_<S, I>(&mut self, symbols: &mut S, elems: I) -> Type<Id, T> where S: ?Sized + IdentEnv<Ident = Id>, T::SpannedId: From<(Id, Span<BytePos>)>, T: HasSpan, I: IntoIterator<Item = T> { ... } fn record(&mut self, types: T::TypeFields, fields: T::Fields) -> T { ... } fn poly_record( &mut self, types: T::TypeFields, fields: T::Fields, rest: T ) -> T { ... } fn extend_full_row( &mut self, types: T::TypeFields, fields: T::Fields, rest: T ) -> T { ... } fn extend_row(&mut self, fields: T::Fields, rest: T) -> T { ... } fn extend_type_row(&mut self, types: T::TypeFields, rest: T) -> T { ... } fn empty_row(&mut self) -> T { ... } fn function<I>(&mut self, args: I, ret: T) -> T where I: IntoIterator<Item = T>, I::IntoIter: DoubleEndedIterator<Item = T> { ... } fn function_implicit<I>(&mut self, args: I, ret: T) -> T where I: IntoIterator<Item = T>, I::IntoIter: DoubleEndedIterator<Item = T> { ... } fn function_type<I>(&mut self, arg_type: ArgType, args: I, ret: T) -> T where I: IntoIterator<Item = T>, I::IntoIter: DoubleEndedIterator<Item = T> { ... } fn generic(&mut self, typ: Generic<Id>) -> T { ... } fn skolem(&mut self, typ: Skolem<Id>) -> T { ... } fn variable(&mut self, typ: TypeVariable) -> T { ... } fn alias(&mut self, name: Id, args: T::Generics, typ: T) -> T { ... } fn ident(&mut self, id: KindedIdent<Id>) -> T { ... } fn projection(&mut self, id: AppVec<Id>) -> T { ... } fn function_builtin(&mut self) -> T { ... } fn string(&mut self) -> T { ... } fn char(&mut self) -> T { ... } fn byte(&mut self) -> T { ... } fn int(&mut self) -> T { ... } fn float(&mut self) -> T { ... } fn unit(&mut self) -> T { ... } fn builtin_type(&mut self, typ: BuiltinType) -> T { ... } fn new_alias(&mut self, name: Id, args: T::Generics, typ: T) -> Alias<Id, T> { ... } fn new_data_alias(&mut self, data: AliasData<Id, T>) -> Alias<Id, T> { ... } fn alias_group(&mut self, group: Vec<AliasData<Id, T>>) -> Vec<Alias<Id, T>> where T: TypeExt<Id = Id>, Id: PartialEq { ... }
}

Required Methods§

source

fn intern_flags(&mut self, typ: Type<Id, T>, flags: Flags) -> T

source

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

source

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

source

fn intern_generics( &mut self, types: impl IntoIterator<Item = Generic<Id>> ) -> T::Generics

source

fn intern_fields( &mut self, types: impl IntoIterator<Item = Field<T::SpannedId, T>> ) -> T::Fields

source

fn intern_type_fields( &mut self, types: impl IntoIterator<Item = Field<T::SpannedId, Alias<Id, T>>> ) -> T::TypeFields

Provided Methods§

source

fn hole(&mut self) -> T

source

fn opaque(&mut self) -> T

source

fn error(&mut self) -> T

source

fn builtin(&mut self, typ: BuiltinType) -> T

source

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

source

fn with_forall(&mut self, typ: T, from: &T) -> T
where Id: Clone + Eq + Hash, T: TypeExt<Id = Id> + Clone, T::Generics: FromIterator<Generic<Id>> + Clone,

source

fn array(&mut self, typ: T) -> T

source

fn array_builtin(&mut self) -> T

source

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

source

fn variant(&mut self, fields: T::Fields) -> T

source

fn poly_variant(&mut self, fields: T::Fields, rest: T) -> T

source

fn effect(&mut self, fields: T::Fields) -> T

source

fn poly_effect(&mut self, fields: T::Fields, rest: T) -> T

source

fn tuple<S, I>(&mut self, symbols: &mut S, elems: I) -> T
where S: ?Sized + IdentEnv<Ident = Id>, T::SpannedId: From<(Id, Span<BytePos>)>, I: IntoIterator<Item = T>, T: HasSpan,

source

fn tuple_<S, I>(&mut self, symbols: &mut S, elems: I) -> Type<Id, T>
where S: ?Sized + IdentEnv<Ident = Id>, T::SpannedId: From<(Id, Span<BytePos>)>, T: HasSpan, I: IntoIterator<Item = T>,

source

fn record(&mut self, types: T::TypeFields, fields: T::Fields) -> T

source

fn poly_record(&mut self, types: T::TypeFields, fields: T::Fields, rest: T) -> T

source

fn extend_full_row( &mut self, types: T::TypeFields, fields: T::Fields, rest: T ) -> T

source

fn extend_row(&mut self, fields: T::Fields, rest: T) -> T

source

fn extend_type_row(&mut self, types: T::TypeFields, rest: T) -> T

source

fn empty_row(&mut self) -> T

source

fn function<I>(&mut self, args: I, ret: T) -> T
where I: IntoIterator<Item = T>, I::IntoIter: DoubleEndedIterator<Item = T>,

source

fn function_implicit<I>(&mut self, args: I, ret: T) -> T
where I: IntoIterator<Item = T>, I::IntoIter: DoubleEndedIterator<Item = T>,

source

fn function_type<I>(&mut self, arg_type: ArgType, args: I, ret: T) -> T
where I: IntoIterator<Item = T>, I::IntoIter: DoubleEndedIterator<Item = T>,

source

fn generic(&mut self, typ: Generic<Id>) -> T

source

fn skolem(&mut self, typ: Skolem<Id>) -> T

source

fn variable(&mut self, typ: TypeVariable) -> T

source

fn alias(&mut self, name: Id, args: T::Generics, typ: T) -> T

source

fn ident(&mut self, id: KindedIdent<Id>) -> T

source

fn projection(&mut self, id: AppVec<Id>) -> T

source

fn function_builtin(&mut self) -> T

source

fn string(&mut self) -> T

source

fn char(&mut self) -> T

source

fn byte(&mut self) -> T

source

fn int(&mut self) -> T

source

fn float(&mut self) -> T

source

fn unit(&mut self) -> T

source

fn builtin_type(&mut self, typ: BuiltinType) -> T

source

fn new_alias(&mut self, name: Id, args: T::Generics, typ: T) -> Alias<Id, T>

source

fn new_data_alias(&mut self, data: AliasData<Id, T>) -> Alias<Id, T>

source

fn alias_group(&mut self, group: Vec<AliasData<Id, T>>) -> Vec<Alias<Id, T>>
where T: TypeExt<Id = Id>, Id: PartialEq,

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl<'a, Id, T, V> TypeContext<Id, T> for &'a RefCell<V>
where V: TypeContext<Id, T>, T: TypePtr<Id = Id>,

source§

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

source§

fn intern_types( &mut self, types: impl IntoIterator<Item = T> ) -> <T as TypePtr>::Types

source§

fn intern_generics( &mut self, types: impl IntoIterator<Item = Generic<Id>> ) -> <T as TypePtr>::Generics

source§

fn intern_fields( &mut self, types: impl IntoIterator<Item = Field<<T as TypePtr>::SpannedId, T>> ) -> <T as TypePtr>::Fields

source§

fn intern_type_fields( &mut self, types: impl IntoIterator<Item = Field<<T as TypePtr>::SpannedId, Alias<Id, T>>> ) -> <T as TypePtr>::TypeFields

source§

fn intern_flags(&mut self, typ: Type<Id, T>, flags: Flags) -> T

source§

fn builtin(&mut self, typ: BuiltinType) -> T

source§

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

source§

fn with_forall(&mut self, typ: T, from: &T) -> T
where Id: Clone + Eq + Hash, T: TypeExt<Id = Id> + Clone, <T as TypePtr>::Generics: FromIterator<Generic<Id>> + Clone,

source§

fn array(&mut self, typ: T) -> T

source§

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

source§

fn variant(&mut self, fields: <T as TypePtr>::Fields) -> T

source§

fn poly_variant(&mut self, fields: <T as TypePtr>::Fields, rest: T) -> T

source§

fn effect(&mut self, fields: <T as TypePtr>::Fields) -> T

source§

fn poly_effect(&mut self, fields: <T as TypePtr>::Fields, rest: T) -> T

source§

fn record( &mut self, types: <T as TypePtr>::TypeFields, fields: <T as TypePtr>::Fields ) -> T

source§

fn poly_record( &mut self, types: <T as TypePtr>::TypeFields, fields: <T as TypePtr>::Fields, rest: T ) -> T

source§

fn extend_full_row( &mut self, types: <T as TypePtr>::TypeFields, fields: <T as TypePtr>::Fields, rest: T ) -> T

source§

fn extend_row(&mut self, fields: <T as TypePtr>::Fields, rest: T) -> T

source§

fn extend_type_row(&mut self, types: <T as TypePtr>::TypeFields, rest: T) -> T

source§

fn generic(&mut self, typ: Generic<Id>) -> T

source§

fn skolem(&mut self, typ: Skolem<Id>) -> T

source§

fn variable(&mut self, typ: TypeVariable) -> T

source§

fn alias(&mut self, name: Id, args: <T as TypePtr>::Generics, typ: T) -> T

source§

fn ident(&mut self, id: KindedIdent<Id>) -> T

source§

fn projection(&mut self, id: AppVec<Id>) -> T

source§

fn builtin_type(&mut self, typ: BuiltinType) -> T

source§

fn new_alias( &mut self, name: Id, args: <T as TypePtr>::Generics, typ: T ) -> Alias<Id, T>

source§

fn new_data_alias(&mut self, data: AliasData<Id, T>) -> Alias<Id, T>

source§

fn alias_group(&mut self, group: Vec<AliasData<Id, T>>) -> Vec<Alias<Id, T>>
where T: TypeExt<Id = Id>, Id: PartialEq,

source§

fn hole(&mut self) -> T

source§

fn opaque(&mut self) -> T

source§

fn error(&mut self) -> T

source§

fn array_builtin(&mut self) -> T

source§

fn empty_row(&mut self) -> T

source§

fn function_builtin(&mut self) -> T

source§

fn string(&mut self) -> T

source§

fn char(&mut self) -> T

source§

fn byte(&mut self) -> T

source§

fn int(&mut self) -> T

source§

fn float(&mut self) -> T

source§

fn unit(&mut self) -> T

source§

impl<'b, Id, T, V> TypeContext<Id, T> for &'b Rc<V>
where for<'a> &'a V: TypeContext<Id, T>, T: TypePtr<Id = Id>,

source§

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

source§

fn intern_types( &mut self, types: impl IntoIterator<Item = T> ) -> <T as TypePtr>::Types

source§

fn intern_generics( &mut self, types: impl IntoIterator<Item = Generic<Id>> ) -> <T as TypePtr>::Generics

source§

fn intern_fields( &mut self, types: impl IntoIterator<Item = Field<<T as TypePtr>::SpannedId, T>> ) -> <T as TypePtr>::Fields

source§

fn intern_type_fields( &mut self, types: impl IntoIterator<Item = Field<<T as TypePtr>::SpannedId, Alias<Id, T>>> ) -> <T as TypePtr>::TypeFields

source§

fn intern_flags(&mut self, typ: Type<Id, T>, flags: Flags) -> T

source§

fn builtin(&mut self, typ: BuiltinType) -> T

source§

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

source§

fn with_forall(&mut self, typ: T, from: &T) -> T
where Id: Clone + Eq + Hash, T: TypeExt<Id = Id> + Clone, <T as TypePtr>::Generics: FromIterator<Generic<Id>> + Clone,

source§

fn array(&mut self, typ: T) -> T

source§

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

source§

fn variant(&mut self, fields: <T as TypePtr>::Fields) -> T

source§

fn poly_variant(&mut self, fields: <T as TypePtr>::Fields, rest: T) -> T

source§

fn effect(&mut self, fields: <T as TypePtr>::Fields) -> T

source§

fn poly_effect(&mut self, fields: <T as TypePtr>::Fields, rest: T) -> T

source§

fn record( &mut self, types: <T as TypePtr>::TypeFields, fields: <T as TypePtr>::Fields ) -> T

source§

fn poly_record( &mut self, types: <T as TypePtr>::TypeFields, fields: <T as TypePtr>::Fields, rest: T ) -> T

source§

fn extend_full_row( &mut self, types: <T as TypePtr>::TypeFields, fields: <T as TypePtr>::Fields, rest: T ) -> T

source§

fn extend_row(&mut self, fields: <T as TypePtr>::Fields, rest: T) -> T

source§

fn extend_type_row(&mut self, types: <T as TypePtr>::TypeFields, rest: T) -> T

source§

fn generic(&mut self, typ: Generic<Id>) -> T

source§

fn skolem(&mut self, typ: Skolem<Id>) -> T

source§

fn variable(&mut self, typ: TypeVariable) -> T

source§

fn alias(&mut self, name: Id, args: <T as TypePtr>::Generics, typ: T) -> T

source§

fn ident(&mut self, id: KindedIdent<Id>) -> T

source§

fn projection(&mut self, id: AppVec<Id>) -> T

source§

fn builtin_type(&mut self, typ: BuiltinType) -> T

source§

fn new_alias( &mut self, name: Id, args: <T as TypePtr>::Generics, typ: T ) -> Alias<Id, T>

source§

fn new_data_alias(&mut self, data: AliasData<Id, T>) -> Alias<Id, T>

source§

fn alias_group(&mut self, group: Vec<AliasData<Id, T>>) -> Vec<Alias<Id, T>>
where T: TypeExt<Id = Id>, Id: PartialEq,

source§

fn hole(&mut self) -> T

source§

fn opaque(&mut self) -> T

source§

fn error(&mut self) -> T

source§

fn array_builtin(&mut self) -> T

source§

fn empty_row(&mut self) -> T

source§

fn function_builtin(&mut self) -> T

source§

fn string(&mut self) -> T

source§

fn char(&mut self) -> T

source§

fn byte(&mut self) -> T

source§

fn int(&mut self) -> T

source§

fn float(&mut self) -> T

source§

fn unit(&mut self) -> T

source§

impl<Id, T, V> TypeContext<Id, T> for Rc<V>
where for<'a> &'a V: TypeContext<Id, T>, T: TypePtr<Id = Id>,

source§

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

source§

fn intern_types( &mut self, types: impl IntoIterator<Item = T> ) -> <T as TypePtr>::Types

source§

fn intern_generics( &mut self, types: impl IntoIterator<Item = Generic<Id>> ) -> <T as TypePtr>::Generics

source§

fn intern_fields( &mut self, types: impl IntoIterator<Item = Field<<T as TypePtr>::SpannedId, T>> ) -> <T as TypePtr>::Fields

source§

fn intern_type_fields( &mut self, types: impl IntoIterator<Item = Field<<T as TypePtr>::SpannedId, Alias<Id, T>>> ) -> <T as TypePtr>::TypeFields

source§

fn intern_flags(&mut self, typ: Type<Id, T>, flags: Flags) -> T

source§

fn builtin(&mut self, typ: BuiltinType) -> T

source§

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

source§

fn with_forall(&mut self, typ: T, from: &T) -> T
where Id: Clone + Eq + Hash, T: TypeExt<Id = Id> + Clone, <T as TypePtr>::Generics: FromIterator<Generic<Id>> + Clone,

source§

fn array(&mut self, typ: T) -> T

source§

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

source§

fn variant(&mut self, fields: <T as TypePtr>::Fields) -> T

source§

fn poly_variant(&mut self, fields: <T as TypePtr>::Fields, rest: T) -> T

source§

fn effect(&mut self, fields: <T as TypePtr>::Fields) -> T

source§

fn poly_effect(&mut self, fields: <T as TypePtr>::Fields, rest: T) -> T

source§

fn record( &mut self, types: <T as TypePtr>::TypeFields, fields: <T as TypePtr>::Fields ) -> T

source§

fn poly_record( &mut self, types: <T as TypePtr>::TypeFields, fields: <T as TypePtr>::Fields, rest: T ) -> T

source§

fn extend_full_row( &mut self, types: <T as TypePtr>::TypeFields, fields: <T as TypePtr>::Fields, rest: T ) -> T

source§

fn extend_row(&mut self, fields: <T as TypePtr>::Fields, rest: T) -> T

source§

fn extend_type_row(&mut self, types: <T as TypePtr>::TypeFields, rest: T) -> T

source§

fn generic(&mut self, typ: Generic<Id>) -> T

source§

fn skolem(&mut self, typ: Skolem<Id>) -> T

source§

fn variable(&mut self, typ: TypeVariable) -> T

source§

fn alias(&mut self, name: Id, args: <T as TypePtr>::Generics, typ: T) -> T

source§

fn ident(&mut self, id: KindedIdent<Id>) -> T

source§

fn projection(&mut self, id: AppVec<Id>) -> T

source§

fn builtin_type(&mut self, typ: BuiltinType) -> T

source§

fn new_alias( &mut self, name: Id, args: <T as TypePtr>::Generics, typ: T ) -> Alias<Id, T>

source§

fn new_data_alias(&mut self, data: AliasData<Id, T>) -> Alias<Id, T>

source§

fn alias_group(&mut self, group: Vec<AliasData<Id, T>>) -> Vec<Alias<Id, T>>
where T: TypeExt<Id = Id>, Id: PartialEq,

source§

fn hole(&mut self) -> T

source§

fn opaque(&mut self) -> T

source§

fn error(&mut self) -> T

source§

fn array_builtin(&mut self) -> T

source§

fn empty_row(&mut self) -> T

source§

fn function_builtin(&mut self) -> T

source§

fn string(&mut self) -> T

source§

fn char(&mut self) -> T

source§

fn byte(&mut self) -> T

source§

fn int(&mut self) -> T

source§

fn float(&mut self) -> T

source§

fn unit(&mut self) -> T

Implementors§

source§

impl<'a, Id, T> TypeContext<Id, T> for &'a TypeCache<Id, T>
where T: TypeExt<Id = Id> + From<(Type<Id, T>, Flags)> + From<Type<Id, T>> + Clone, T::Types: Default + Extend<T> + FromIterator<T>, T::Generics: FromIterator<Generic<Id>>, T::Fields: FromIterator<Field<T::SpannedId, T>>, T::TypeFields: FromIterator<Field<T::SpannedId, Alias<Id, T>>>,

source§

impl<'ast, Id> TypeContext<Id, AstType<'ast, Id>> for ArenaRef<'_, 'ast, Id>

source§

impl<Id, T> TypeContext<Id, T> for Interner<Id, T>
where T: TypeContextAlloc<Id = Id> + TypeExt<Id = Id> + Eq + Hash + Clone, T::Types: FromIterator<T>, T::Generics: FromIterator<Generic<Id>>, T::TypeFields: FromIterator<Field<T::SpannedId, Alias<Id, T>>>, T::SpannedId: Eq + Hash, Id: Eq + Hash,

source§

impl<Id, T> TypeContext<Id, T> for NullInterner
where T: TypePtr<Id = Id> + From<(Type<Id, T>, Flags)> + From<Type<Id, T>>, T::Types: FromIterator<T>, T::Generics: FromIterator<Generic<Id>>, T::Fields: FromIterator<Field<T::SpannedId, T>>, T::TypeFields: FromIterator<Field<T::SpannedId, Alias<Id, T>>>,

source§

impl<Id, T> TypeContext<Id, T> for TypeCache<Id, T>
where T: TypeExt<Id = Id> + From<(Type<Id, T>, Flags)> + From<Type<Id, T>> + Clone, T::Types: Default + Extend<T> + FromIterator<T>, T::Generics: FromIterator<Generic<Id>>, T::Fields: FromIterator<Field<T::SpannedId, T>>, T::TypeFields: FromIterator<Field<T::SpannedId, Alias<Id, T>>>,