Skip to main content

Type

Enum Type 

Source
pub enum Type {
    Any,
    MaybeZero(Box<Type>),
    Named(String, Vec<Type>),
    And(Vec<Type>),
    Arrow(Box<Type>, Box<Type>),
    Tuple(Vec<Type>),
    HTuple(Box<Type>, Constant),
    Product(Vec<Type>),
    Ratio(Box<Type>, Box<Type>),
    Constant(Constant),
}
Expand description

Each Term has at least one Type.

Types are composed of Atomic parts like Nameds. An Named type has a name and possibly some parameters. Atomic parts can be combined to form Compound parts like Arrows. Compound parts are formed by some combination of Arrows, Tuples, Products, and Ratios. At the Highest level a Compound type can be pluralized with an And to join it to other Compounds.

And types are represented in Conjunctive-Normal-Form which requires the Ands to only occupy the highest level of a type. Some basic typing algorithms may not work correctly if a type is not in Conjunctive-Normal-Form.

Subtyping is implemented with And types. An implication, A + A => B, may be rewritten as just A + B.

Variants§

§

Any

§

MaybeZero(Box<Type>)

§

Named(String, Vec<Type>)

§

And(Vec<Type>)

§

Arrow(Box<Type>, Box<Type>)

§

Tuple(Vec<Type>)

§

HTuple(Box<Type>, Constant)

§

Product(Vec<Type>)

§

Ratio(Box<Type>, Box<Type>)

§

Constant(Constant)

Implementations§

Source§

impl Type

Source

pub fn datatype(&self) -> String

Source

pub fn project_ratio(&self) -> (Vec<Type>, Vec<Type>)

Source

pub fn is_ctuple(&self) -> bool

Source

pub fn is_open(&self) -> bool

Source

pub fn is_constant(&self) -> bool

Source

pub fn all_named(&self) -> Vec<Type>

Source

pub fn and(&self, other: &Type) -> Type

Source

pub fn is_var(&self) -> bool

Source

pub fn domain(&self) -> Type

Source

pub fn range(&self) -> Type

Source

pub fn vars(&self) -> Vec<String>

Source

pub fn simplify_ratio(&self) -> Type

Source

pub fn normalize(&self) -> Type

Source

pub fn remove(&self, x: &Type) -> Type

Source

pub fn substitute(&self, subs: &HashMap<Type, Type>) -> Type

Source

pub fn is_concrete(&self) -> bool

Source

pub fn kind(&self, kinds: &HashMap<Type, Kind>) -> Kind

Source

pub fn narrow(&self, kinds: &HashMap<Type, Kind>, k: &Kind) -> Type

Source

pub fn is_bottom(&self) -> bool

Source

pub fn compile_subs(subs: &Vec<(Type, Type)>) -> Result<HashMap<Type, Type>, ()>

Source

pub fn implies(tlc: &TLC, lt: &Type, rt: &Type) -> Type

Source

pub fn arrow_implies( tlc: &TLC, lt: &mut Type, rt: &mut Type, inarrow: InArrow, ) -> Type

Source

pub fn subs_implies( tlc: &TLC, subs: &mut Vec<(Type, Type)>, lt: &Type, rt: &Type, ) -> Type

Source

pub fn nored_implies( tlc: &TLC, subs: &mut Vec<(Type, Type)>, lt: &Type, rt: &Type, ) -> Type

Source

pub fn implication_unifier(&self, other: &Type) -> Type

Source

pub fn subs_implication_unifier( &self, subs: &mut Vec<(Type, Type)>, other: &Type, ) -> Type

Source

pub fn most_general_unifier(&self, other: &Type) -> Type

Trait Implementations§

Source§

impl Clone for Type

Source§

fn clone(&self) -> Type

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Type

Source§

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

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

impl Hash for Type

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for Type

Source§

fn cmp(&self, other: &Type) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for Type

Source§

fn eq(&self, other: &Type) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for Type

Source§

fn partial_cmp(&self, other: &Type) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Eq for Type

Source§

impl StructuralPartialEq for Type

Auto Trait Implementations§

§

impl Freeze for Type

§

impl RefUnwindSafe for Type

§

impl Send for Type

§

impl Sync for Type

§

impl Unpin for Type

§

impl UnsafeUnpin for Type

§

impl UnwindSafe for Type

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.