op |
|
Defined in
- 5.2 Precedence and associativity — Precedence and associativity
- 5.3 Overloading and user-defined operators — Overloading built-in operators — op declarations in impl
- 1.6 Operators and delimiters — + - * / % ** +% -% % +| -| | & | ^ ~ << >> && || !
- 8.3 Task — Task<T, E> is a lazy computation.
- 6.5 Errors — There are no exceptions.
- 3.5 Unions and optionals — A | B — an anonymous union.
Examples
operator <|> <T>(a: Parser<T>, b: Parser<T>) -> Parser<T> infixl 3 => a.orElse(b)
operator ~~ (s: str, re: Regex) -> bool infix 4 => re.matches(s)
operator ^^ (a: f64, b: f64) -> f64 infixr 12 => a.pow(b)
operator ¬ (b: Bits) -> Bits prefix => b.invert()— 5.3 Overloading and user-defined operators
@error data NotFound { what: str }
@error enum PayError { Declined(reason: str), Fraud }
fn charge(card: Card, sum: Money) -> Receipt | PayError | NetError net {
let token = Vault.tokenize(card)? // ? propagates the errors of the call
if sum <= Money.zero() { fail PayError.Declined("zero sum") }
Bank.pay(token, sum)
}Related diagnostics
chained-comparison, not-callable, not-overloadable, operator-decl, range-not-iterable, invalid-char, task-reuse, fail-type, question-context, unhandled-error, type-mismatch