#[non_exhaustive]pub enum ErrorKind<Prim: PrimitiveType> {
Show 20 variants
TypeMismatch(Type<Prim>, Type<Prim>),
TupleLenMismatch {
lhs: TupleLen,
rhs: TupleLen,
context: TupleContext,
},
UndefinedVar(String),
RecursiveType(Type<Prim>),
RepeatedAssignment(String),
InvalidFieldName(String),
CannotIndex,
UnsupportedIndex,
IndexOutOfBounds {
index: usize,
len: TupleLen,
},
RepeatedField(String),
CannotAccessFields,
FieldsMismatch {
lhs_fields: HashSet<String>,
rhs_fields: HashSet<String>,
},
MissingFields {
fields: HashSet<String>,
available_fields: HashSet<String>,
},
UnresolvedParam,
FailedConstraint {
ty: Type<Prim>,
constraint: Box<dyn Constraint<Prim>>,
},
DynamicLen(TupleLen),
UnsupportedFeature(UnsupportedType),
UnsupportedType(Type<Prim>),
UnsupportedParam,
AstConversion(AstConversionError),
}
Expand description
Kinds of errors that can occur during type inference.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
TypeMismatch(Type<Prim>, Type<Prim>)
Trying to unify incompatible types. The first type is LHS, the second one is RHS.
TupleLenMismatch
Incompatible tuple lengths.
Fields
lhs: TupleLen
Length of the LHS. This is the length determined by type annotations for assignments and the number of actually supplied args in function calls.
rhs: TupleLen
Length of the RHS. This is usually the actual tuple length in assignments and the number of expected args in function calls.
context: TupleContext
Context in which the error has occurred.
UndefinedVar(String)
Undefined variable occurrence.
RecursiveType(Type<Prim>)
Trying to unify a type with a type containing it.
RepeatedAssignment(String)
Repeated assignment to the same variable in function args or tuple destructuring.
InvalidFieldName(String)
Field name is invalid.
CannotIndex
Value cannot be indexed (i.e., not a tuple).
UnsupportedIndex
Unsupported indexing operation. For example, the receiver type is not known, or it is a tuple with an unknown length, and the type of the element cannot be decided.
IndexOutOfBounds
Index is out of bounds for the indexed tuple.
RepeatedField(String)
Repeated field in object initialization / destructuring.
CannotAccessFields
Cannot access fields in a value (i.e., it’s not an object).
FieldsMismatch
Field set differs between LHS and RHS, which are both concrete objects.
MissingFields
Concrete object does not have required fields.
Fields
UnresolvedParam
Mention of a bounded type or length variable in a type supplied
to Substitutions::unify()
.
Bounded variables are instantiated into free vars automatically during
type inference, so this error
can only occur with types manually supplied to Substitutions::unify()
.
FailedConstraint
Failure when applying constraint to a type.
Fields
constraint: Box<dyn Constraint<Prim>>
Failing constraint.
DynamicLen(TupleLen)
Length with the static constraint is actually dynamic (contains UnknownLen::Dynamic
).
UnsupportedFeature(UnsupportedType)
Language feature not supported by type inference logic.
UnsupportedType(Type<Prim>)
Type not supported by type inference logic. For example,
a TypeArithmetic
or Constraint
implementations may return this error
if they encounter an unknown Type
variant.
UnsupportedParam
Unsupported use of type or length params in a function declaration.
Type or length params are currently not supported in type annotations. Here’s an example of code that triggers this error:
identity: (('T,)) -> ('T,) = |x| x;
AstConversion(AstConversionError)
Error while instantiating a type from AST.
Implementations§
Source§impl<Prim: PrimitiveType> ErrorKind<Prim>
impl<Prim: PrimitiveType> ErrorKind<Prim>
Sourcepub fn unsupported<T: Into<UnsupportedType>>(ty: T) -> Self
pub fn unsupported<T: Into<UnsupportedType>>(ty: T) -> Self
Creates an error for an lvalue type not supported by the interpreter.
Sourcepub fn failed_constraint(
ty: Type<Prim>,
constraint: impl Constraint<Prim> + Clone,
) -> Self
pub fn failed_constraint( ty: Type<Prim>, constraint: impl Constraint<Prim> + Clone, ) -> Self
Creates a “failed constraint” error.
Trait Implementations§
Source§impl<Prim: PrimitiveType> Display for ErrorKind<Prim>
impl<Prim: PrimitiveType> Display for ErrorKind<Prim>
Source§impl<Prim: PrimitiveType> Error for ErrorKind<Prim>
impl<Prim: PrimitiveType> Error for ErrorKind<Prim>
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
Auto Trait Implementations§
impl<Prim> Freeze for ErrorKind<Prim>where
Prim: Freeze,
impl<Prim> !RefUnwindSafe for ErrorKind<Prim>
impl<Prim> Send for ErrorKind<Prim>
impl<Prim> Sync for ErrorKind<Prim>
impl<Prim> Unpin for ErrorKind<Prim>where
Prim: Unpin,
impl<Prim> !UnwindSafe for ErrorKind<Prim>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> PipeAsRef for T
impl<T> PipeAsRef for T
Source§impl<T> PipeBorrow for T
impl<T> PipeBorrow for T
Source§impl<T> PipeDeref for T
impl<T> PipeDeref for T
Source§impl<T> PipeRef for T
impl<T> PipeRef for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&Self) -> R,
fn tap<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&Self) -> R,
Source§fn tap_dbg<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&Self) -> R,
fn tap_dbg<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&Self) -> R,
tap
in debug builds, and does nothing in release builds.Source§fn tap_mut<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&mut Self) -> R,
fn tap_mut<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&mut Self) -> R,
Source§fn tap_mut_dbg<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&mut Self) -> R,
fn tap_mut_dbg<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&mut Self) -> R,
tap_mut
in debug builds, and does nothing in release builds.Source§impl<T, U> TapAsRef<U> for Twhere
U: ?Sized,
impl<T, U> TapAsRef<U> for Twhere
U: ?Sized,
Source§fn tap_ref<F, R>(self, func: F) -> Self
fn tap_ref<F, R>(self, func: F) -> Self
Source§fn tap_ref_dbg<F, R>(self, func: F) -> Self
fn tap_ref_dbg<F, R>(self, func: F) -> Self
tap_ref
in debug builds, and does nothing in release builds.Source§fn tap_ref_mut<F, R>(self, func: F) -> Self
fn tap_ref_mut<F, R>(self, func: F) -> Self
Source§impl<T, U> TapBorrow<U> for Twhere
U: ?Sized,
impl<T, U> TapBorrow<U> for Twhere
U: ?Sized,
Source§fn tap_borrow<F, R>(self, func: F) -> Self
fn tap_borrow<F, R>(self, func: F) -> Self
Source§fn tap_borrow_dbg<F, R>(self, func: F) -> Self
fn tap_borrow_dbg<F, R>(self, func: F) -> Self
tap_borrow
in debug builds, and does nothing in release builds.Source§fn tap_borrow_mut<F, R>(self, func: F) -> Self
fn tap_borrow_mut<F, R>(self, func: F) -> Self
Source§impl<T> TapDeref for T
impl<T> TapDeref for T
Source§fn tap_deref_dbg<F, R>(self, func: F) -> Self
fn tap_deref_dbg<F, R>(self, func: F) -> Self
tap_deref
in debug builds, and does nothing in release builds.Source§fn tap_deref_mut<F, R>(self, func: F) -> Self
fn tap_deref_mut<F, R>(self, func: F) -> Self
self
for modification.