# New Ticket Created by "brian d foy" # Please include the string: [perl #132713] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/Ticket/Display.html?id=132713 >
I originally asked this on StackOverflow: https://stackoverflow.com/q/48219788/2766176 This fails to be right associative: sub infix:<↑> ( Int:D \n, Int:D \m --> Int:D ) is assoc<right> is equiv(&infix:<**>) { n ** m } put "2**2**2**2 = ", 2**2**2**2; put "2↑2↑2↑2 = ", 2↑2↑2↑2; put "2↑ (2↑ (2↑2) ) = ", 2↑ (2↑ (2↑2) ); Reversing the traits fixes that: sub infix:<↑> ( Int:D \n, Int:D \m --> Int:D ) is equiv(&infix:<**>) is assoc<right> { n ** m } I didn't see anything in the docs about the ordering of traits but I wouldn't expect order to matter. Neither did I see anything saying I couldn't combine traits. As far as I can tell the precedence still works when it's specified first: sub infix:<↑> ( Int:D \n, Int:D \m --> Int:D ) is equiv(&infix:<**>) is assoc<right> { n ** m } put "2↑3**4↑2 = ", 2↑2**2↑2; put "2↑(3**(4↑2)) = ", 2↑2**2↑2; put "2↑3*4↑2 = ", 2↑2*2↑2; put "(2↑2)*(2↑2) = ", (2↑2)*(2↑2); put "2↑3+4↑2 = ", 2↑2+2↑2; put "(2↑2)+(2↑2) = ", (2↑2)+(2↑2); How is this supposed to work? Should either way work? I can easily imagine situations where I want to stack many traits: sub infix:<↑> ( Int:D \n, Int:D \m --> Int:D ) is equiv(&infix:<**>) is assoc<right> is pure is export { ... }