scala - How to make a right-associative infix operator? -
i have associative operation >>. problem cost linearly depends on size of left operand. expression formed sequence of n applications of >> like
a >> >> >> >> >> ... >> it has quadratic cost in terms of n, because default infix operators left-associative. how make right-associative cost of such expression kept linear in terms of n?
a found solution. scala reference says in 6.12.3 infix operations:
the associativity of operator determined operator’s last character. operators ending in colon ‘:’ right-associative. other operators left-associative.
therefore enough rename >> >>:.
it took me time realize while a >> b desugared a.>>(b), a >>: b desugared b.>>:(a). had define >>: as
def >>:(x: t): t = x >>
Comments
Post a Comment