On Thu, 22 Jan 2026 17:57:55 GMT, Maurizio Cimadamore <[email protected]> 
wrote:

> This PR adds experimental support for type-class based operator resolution. 
> This means that it is possible to define classes that "witness" some 
> numerical type class, like so:
> 
> 
> record Box(int i) {
>    __witness Integral<Box> INTEGRAL = ...
> }
> 
> 
> Then, we can start using `Box` in e.g. binary operations, like so:
> 
> 
> Box one = new Box(1);
> Box two = new Box(2);
> one + two // three
> 
> 
> In order to support type-class mediated operator resolution, we needed to add 
> a new kind of operator helper in `Operators`. These new operator helpers (one 
> for unary operators, one for binary operators) wrap some method in one of the 
> standard numeric classes -- for instance, type class `+` is realized through 
> `Numerical::add`, and so forth.
> 
> There's a new kind of operator symbol, namely `TypeClassOperatorSymbol` which 
> is used to store the type of the operation as well as the method symbol in 
> charge of performing the operation.
> 
> To resolve an operator, we basically have to prove that a witness for the 
> corresponding class, parameterized by the operand type exists. E.g. in the 
> above, we need to find a witness for `Numerical<Box>`.
> 
> During lowering, we emit such witness, and call the correct operator method 
> on it.
> 
> Note that support for assignment operators is also provided -- `Lower` 
> already has logic to lower some assignment operators into plain binary 
> operations, so we just leverage that support to translate type-class based 
> assignment ops.

This pull request has now been integrated.

Changeset: 6a6f75cf
Author:    Maurizio Cimadamore <[email protected]>
URL:       
https://git.openjdk.org/valhalla/commit/6a6f75cf3a01b7a986dd18acb4472418f2e4d76e
Stats:     564 lines in 10 files changed: 505 ins; 2 del; 57 mod

[type-classes] Initial work to enable type-classes mediated operator support

-------------

PR: https://git.openjdk.org/valhalla/pull/1948

Reply via email to