Skip to main content

CapKind

Enum CapKind 

Source
pub enum CapKind {
    Eq,
    Ord,
    Hash,
    HashStable,
    Numeric,
}
Expand description

One structural property a type either has or does not (§5.4, §5.5).

The five are not independent; the two hash-shaped ones are a pair, see CapKind::HashStable.

Variants§

§

Eq

Comparable with == / != (§5.5). Scalars and Unit are; a composite is iff every component is; functions never are.

§

Ord

Has a total order — usable with </>, in a heap, or as a sort key (§5.4 SupportsOrd, ADR-045). The orderable types are exactly the scalars whose descriptors carry a compare callback.

§

Hash

Hashable: the runtime can compute a structural hash of the value. This is CapKind::Eq’s companion — the descriptor’s hash and equals callbacks are defined together — and on its own it is not enough to be a key.

§

HashStable

Hashable and immutable, which is what a Map key or Set element must be (D4).

A Vec is hashable: the runtime can hash its current contents. It is not stably hashable, because key.push(2) after table.insert(key, v) moves the entry’s hash without moving the entry, and the value can no longer be found. Python rejects list/dict/set as keys for exactly this reason; Rust permits HashMap<Vec<i32>, V> only because the borrow checker makes mutating a held key impossible, and Praxis has var mutation and no borrow checker.

The rule is mutability, not container-ness: scalars, Text, tuples, records and enums are stable structurally — a tuple is a key iff every component is — and the eight mutable collections are not.

§

Numeric

Numeric: admits +, -, *, /, unary minus, and the numeric sinks (sum, product). Int, UInt, Byte and Float are; nothing else is. % is narrower still and is not this capability.

Implementations§

Source§

impl CapKind

Source

pub const ALL: &'static [CapKind]

Every capability, for exhaustive sweeps (agreement tests, tables).

Trait Implementations§

Source§

impl Clone for CapKind

Source§

fn clone(&self) -> CapKind

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 Copy for CapKind

Source§

impl Debug for CapKind

Source§

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

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

impl Eq for CapKind

Source§

impl Hash for CapKind

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 CapKind

Source§

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

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for CapKind

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.