Skip to main content

Type

Enum Type 

Source
pub enum Type {
Show 17 variants Int, Float, Number, String, Bool, Symbol, None, Markdown, Array(Box<Type>), Tuple(Vec<Type>), Dict(Box<Type>, Box<Type>), Function(Vec<Type>, Box<Type>), Union(Vec<Type>), Record(BTreeMap<String, Type>, Box<Type>), RowEmpty, Var(TypeVarId), Never,
}
Expand description

Represents a type in the mq type system

Variants§

§

Int

Integer type

§

Float

Floating point type

§

Number

Number type (unified numeric type)

§

String

String type

§

Bool

Boolean type

§

Symbol

Symbol type

§

None

None/null type

§

Markdown

Markdown document type

§

Array(Box<Type>)

Array type with element type

§

Tuple(Vec<Type>)

Tuple type with known element types (e.g., (number, string))

Used when --tuple mode is enabled to track per-element types for small heterogeneous arrays like [1, "hello"].

§

Dict(Box<Type>, Box<Type>)

Dictionary type with key and value types

§

Function(Vec<Type>, Box<Type>)

Function type: arguments -> return type

§

Union(Vec<Type>)

Union type: represents a value that could be one of multiple types Used for try/catch expressions with different branch types

§

Record(BTreeMap<String, Type>, Box<Type>)

Record type with known fields and optional row extension (row polymorphism).

The first element is a map of field names to their types. The second element is the row tail: either RowEmpty (closed record) or Var(id) (open record that may have additional fields).

Examples:

  • {a: number, b: string}Record({"a": Number, "b": String}, RowEmpty)
  • {a: number | r}Record({"a": Number}, Var(r))
§

RowEmpty

Empty row — marks a closed record with no additional fields

§

Var(TypeVarId)

Type variable for inference

§

Never

Never type (bottom type) — represents unreachable code paths.

Produced when type narrowing eliminates all possible types from a union. For example, Union(Array(String), Array(Number)) minus is_array predicate leaves no viable types, producing Never for the else-branch.

Implementations§

Source§

impl Type

Source

pub fn function(params: Vec<Type>, ret: Type) -> Self

Creates a new function type

Source

pub fn array(elem: Type) -> Self

Creates a new array type

Source

pub fn tuple(elems: Vec<Type>) -> Self

Creates a new tuple type with known element types

Source

pub fn dict(key: Type, value: Type) -> Self

Creates a new dict type

Source

pub fn record(fields: BTreeMap<String, Type>, rest: Type) -> Self

Creates a new record type with known fields

Source

pub fn union(types: Vec<Type>) -> Self

Creates a new union type from two or more types Automatically normalizes the union (removes duplicates, flattens nested unions)

Source

pub fn subtract(&self, exclude: &Type) -> Type

Removes a type from a union by discriminant, returning the remaining type.

If this is not a union, returns self unchanged. If only one type remains after subtraction, returns it directly (unwrapped). If all members are removed (e.g., Union(Array(String), Array(Number)) minus Array), returns Type::Never to signal an unreachable code path.

Source

pub fn is_nullable(&self) -> bool

Checks if this type is nullable (is None or a Union containing None).

Source

pub fn is_never(&self) -> bool

Checks if this is the bottom type (never/unreachable).

Source

pub fn is_var(&self) -> bool

Checks if this is a type variable

Source

pub fn is_concrete(&self) -> bool

Checks if this type contains no free type variables (is fully concrete)

Source

pub fn is_union(&self) -> bool

Checks if this is a union type

Source

pub fn as_var(&self) -> Option<TypeVarId>

Gets the type variable ID if this is a type variable

Source

pub fn apply_subst(&self, subst: &Substitution) -> Type

Substitutes type variables according to the given substitution

Source

pub fn free_vars(&self) -> Vec<TypeVarId>

Gets all free type variables in this type

Source

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

Checks if this type can match with another type (for overload resolution).

This is a weaker check than unification - it returns true if the types could potentially be unified, but doesn’t require them to be identical. Type variables always match.

Source

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

Strict branch compatibility check for if-expression unification decisions.

Unlike can_match, this treats an unresolved type variable (Var) as incompatible with any known concrete type. This is used when deciding whether if-expression branches should be unified or placed in a Union type: if one branch has None in a tuple element position and another has Var (which might resolve to Number), we conservatively choose Union to avoid a spurious unification error later.

  • Var(a) vs Var(b)true (both unknown; let unification decide)
  • Var(a) vs concretefalse (Var might not match the concrete type)
  • concrete vs Var(a)false (symmetric)
  • All other cases mirror can_match
Source

pub fn match_score(&self, other: &Type) -> Option<u32>

Computes a match score for overload resolution. Higher scores indicate better matches. Returns None if types cannot match.

Scoring:

  • Exact match: 100
  • Union type: best match among variants (slightly penalized)
  • Type variable: 10
  • Structural match (array/dict/function): sum of component scores
Source§

impl Type

Source

pub fn display_resolved(&self) -> String

Formats the type as a string, resolving type variables to their readable names. This is used for better error messages.

Source

pub fn display_renumbered(&self) -> String

Formats the type with renumbered type variables starting from 'a.

This produces clean, sequential type variable names regardless of internal slotmap indices, which can be very large due to builtin registrations. For example, instead of 'y32 or 'x3, this produces 'a, 'b, etc.

Trait Implementations§

Source§

impl Clone for Type

Source§

fn clone(&self) -> Type

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 Type

Source§

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

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

impl Display 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 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 · 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 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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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> ToSmolStr for T
where T: Display + ?Sized,

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.