Trait arithmetic_typing::arith::TypeArithmetic[][src]

pub trait TypeArithmetic<Prim: PrimitiveType> {
    fn process_unary_op(
        &self,
        substitutions: &mut Substitutions<Prim>,
        context: &UnaryOpContext<Prim>,
        errors: OpErrors<'_, Prim>
    ) -> Type<Prim>;
fn process_binary_op(
        &self,
        substitutions: &mut Substitutions<Prim>,
        context: &BinaryOpContext<Prim>,
        errors: OpErrors<'_, Prim>
    ) -> Type<Prim>; }
Expand description

Arithmetic allowing to customize primitive types and how unary and binary operations are handled during type inference.

Examples

See crate examples for examples how define custom arithmetics.

Required methods

fn process_unary_op(
    &self,
    substitutions: &mut Substitutions<Prim>,
    context: &UnaryOpContext<Prim>,
    errors: OpErrors<'_, Prim>
) -> Type<Prim>
[src]

Handles a unary operation.

fn process_binary_op(
    &self,
    substitutions: &mut Substitutions<Prim>,
    context: &BinaryOpContext<Prim>,
    errors: OpErrors<'_, Prim>
) -> Type<Prim>
[src]

Handles a binary operation.

Implementors

impl TypeArithmetic<Num> for NumArithmetic[src]

fn process_unary_op<'a>(
    &self,
    substitutions: &mut Substitutions<Num>,
    context: &UnaryOpContext<Num>,
    errors: OpErrors<'_, Num>
) -> Type<Num>
[src]

fn process_binary_op<'a>(
    &self,
    substitutions: &mut Substitutions<Num>,
    context: &BinaryOpContext<Num>,
    errors: OpErrors<'_, Num>
) -> Type<Num>
[src]

impl<Prim: WithBoolean> TypeArithmetic<Prim> for BoolArithmetic[src]

fn process_unary_op<'a>(
    &self,
    substitutions: &mut Substitutions<Prim>,
    context: &UnaryOpContext<Prim>,
    errors: OpErrors<'_, Prim>
) -> Type<Prim>
[src]

Processes a unary operation.

fn process_binary_op(
    &self,
    substitutions: &mut Substitutions<Prim>,
    context: &BinaryOpContext<Prim>,
    errors: OpErrors<'_, Prim>
) -> Type<Prim>
[src]

Processes a binary operation.

  • == and != require LHS and RHS to have the same type (no matter which one). These ops return Bool.
  • && and || require LHS and RHS to have Bool type. These ops return Bool.
  • Other operations fail with ErrorKind::UnsupportedFeature.