I found a solution. Scala reference says in section 6.12.3 Infix Operations:
The associativity of an operator is determined by the operator’s last character. Operators ending in a colon ‘:’ are right-associative. All other operators are left-associative.
Therefore it was enough to rename >>
to >>:
.
It took me some time to realize that while a >> b
is desugared into a.>>(b)
, a >>: b
is desugared into b.>>:(a)
. So I had to define >>:
as
def >>:(x: T): T = x >> this