Skip to main content

TypeSystem

Struct TypeSystem 

Source
pub struct TypeSystem {
    pub env: TypeEnv,
    pub classes: ClassEnv,
    pub adts: HashMap<Symbol, AdtDecl>,
    pub class_info: HashMap<Symbol, ClassInfo>,
    pub class_methods: HashMap<Symbol, ClassMethodInfo>,
    pub declared_values: HashSet<Symbol>,
    pub supply: TypeVarSupply,
    /* private fields */
}

Fields§

§env: TypeEnv§classes: ClassEnv§adts: HashMap<Symbol, AdtDecl>§class_info: HashMap<Symbol, ClassInfo>§class_methods: HashMap<Symbol, ClassMethodInfo>§declared_values: HashSet<Symbol>

Names introduced by declare fn (forward declarations).

These are placeholders in the type environment and must not block a later real definition (e.g. fn foo = ... or host/CLI injection).

§supply: TypeVarSupply

Implementations§

Source§

impl TypeSystem

Source

pub fn new() -> Self

Source

pub fn fresh_type_var(&mut self, name: Option<Symbol>) -> TypeVar

Source

pub fn set_limits(&mut self, limits: TypeSystemLimits)

Source

pub fn with_prelude() -> Result<Self, TypeError>

Source

pub fn inject_decl(&mut self, decl: &Decl) -> Result<(), TypeError>

Source

pub fn inject_decls(&mut self, decls: &[Decl]) -> Result<(), TypeError>

Source

pub fn add_value(&mut self, name: impl AsRef<str>, scheme: Scheme)

Source

pub fn add_overload(&mut self, name: impl AsRef<str>, scheme: Scheme)

Source

pub fn inject_class(&mut self, name: impl AsRef<str>, supers: Vec<Symbol>)

Source

pub fn inject_instance(&mut self, class: impl AsRef<str>, inst: Instance)

Source

pub fn inject_class_decl(&mut self, decl: &ClassDecl) -> Result<(), TypeError>

Source

pub fn inject_instance_decl( &mut self, decl: &InstanceDecl, ) -> Result<PreparedInstanceDecl, TypeError>

Source

pub fn prepare_instance_decl( &mut self, decl: &InstanceDecl, ) -> Result<PreparedInstanceDecl, TypeError>

Source

pub fn inject_fn_decl(&mut self, decl: &FnDecl) -> Result<(), TypeError>

Source

pub fn inject_fn_decls(&mut self, decls: &[FnDecl]) -> Result<(), TypeError>

Source

pub fn inject_declare_fn_decl( &mut self, decl: &DeclareFnDecl, ) -> Result<(), TypeError>

Source

pub fn instantiate_class_method_for_head( &mut self, class: &Symbol, method: &Symbol, head: &Type, ) -> Result<Type, TypeError>

Source

pub fn typecheck_instance_method( &mut self, prepared: &PreparedInstanceDecl, method: &InstanceMethodImpl, ) -> Result<TypedExpr, TypeError>

Source

pub fn inject_adt(&mut self, adt: &AdtDecl)

Register constructor schemes for an ADT in the type environment. This makes constructors (e.g. Some, None, Ok, Err) available to the type checker as normal values.

Source

pub fn adt_from_decl(&mut self, decl: &TypeDecl) -> Result<AdtDecl, TypeError>

Source

pub fn inject_type_decl(&mut self, decl: &TypeDecl) -> Result<(), TypeError>

Source

pub fn infer_typed( &mut self, expr: &Expr, ) -> Result<(TypedExpr, Vec<Predicate>, Type), TypeError>

Source

pub fn infer_typed_with_gas( &mut self, expr: &Expr, gas: &mut GasMeter, ) -> Result<(TypedExpr, Vec<Predicate>, Type), TypeError>

Source

pub fn infer( &mut self, expr: &Expr, ) -> Result<(Vec<Predicate>, Type), TypeError>

Source

pub fn infer_with_gas( &mut self, expr: &Expr, gas: &mut GasMeter, ) -> Result<(Vec<Predicate>, Type), TypeError>

Trait Implementations§

Source§

impl Clone for TypeSystem

Source§

fn clone(&self) -> TypeSystem

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TypeSystem

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for TypeSystem

Source§

fn default() -> TypeSystem

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.