# New Ticket Created by "Carl Mäsak"
# Please include the string: [perl #112234]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=112234 >
<colomon> r: say 4 < 5 < 6 < 7
<p6eval> rakudo 4373f0: OUTPUT«True»
<colomon> r: say 4 < 5 < 6 < 4
<p6eval> rakudo 4373f0: OUTPUT«False»
<masak> r: enum A <e1 e2 e3>; multi infix:<< < >>(A, A) { False };
multi infix:<< < >>(e1, e2) { True }; multi infix:<< < >>(e2, e3) {
True }; multi infix:<< < >>(e3, e1) { True }; say e1 < e2 < e3 < e1
<p6eval> rakudo 4373f0: OUTPUT«False»
<masak> aww :)
<masak> why doesn't the above work?
<tadzik> masak: doesn't it?
<masak> no. read carefully what it does.
<tadzik> oh, right, it doesn't
<masak> r: enum A <e1 e2 e3>; multi infix:<< < >>(e1, e2) { True }; say e1 < e2
<p6eval> rakudo 4373f0: OUTPUT«True»
<masak> r: enum A <e1 e2 e3>; multi infix:<< < >>(e3, e1) { True }; say e3 < e1
<p6eval> rakudo 4373f0: OUTPUT«False»
<masak> there we go.
<masak> that's the bit that's failing.
<tadzik> r: enum A <e1 e2 e3>; multi infix:<< < >>(A, A) { False };
multi infix:<< < >>(e1, e2) { True }; multi infix:<< < >>(e2, e3) {
True }; multi infix:<< < >>(e3, e1) { die "LOL"; True }; say e1 < e2
< e3 < e1
<p6eval> rakudo 4373f0: OUTPUT«False»
<tadzik> yep
<masak> right.
<masak> it's never run at all.
<masak> r: enum A <e1 e2>; sub foo(e1) { die "MATCHED" }; foo e1
<p6eval> rakudo 4373f0: OUTPUT«MATCHED in sub foo at
/tmp/E03yKbC5Z_:1 in block <anon> at /tmp/E03yKbC5Z_:1»
<masak> seems to be related to operators, then.
<tadzik> r: enum A <e1>; multi prefix:<->(e1) { die "AWW" }; say -e1
<p6eval> rakudo 4373f0: OUTPUT«AWW in sub prefix:<-> at
/tmp/LdnFrauMSw:1 in block <anon> at /tmp/LdnFrauMSw:1»
<colomon> r: enum A <e1 e2 e3>; multi infix:<< < >>(e1, e2) { say
"hello!" }; say e1 < e2
<p6eval> rakudo 4373f0: OUTPUT«True»
<tadzik> r: enum A <e1 e2>; multi infix:<->(e1, e2) { die "AWW" }; say e1 - e2
<p6eval> rakudo 4373f0: OUTPUT«AWW in sub infix:<-> at
/tmp/tvYdwSv0aA:1 in block <anon> at /tmp/tvYdwSv0aA:1»
<tadzik> hmm
<colomon> r: enum A <e1 e2 e3>; multi infix:<< < >>(A, A) { say
"hello!" }; say e1 < e2
<p6eval> rakudo 4373f0: OUTPUT«True»
<colomon> r: enum A <e1 e2>; multi infix:<< - >>(e1, e2) { die "AWW"
}; say e1 - e2
<p6eval> rakudo 4373f0: OUTPUT«-1»
<colomon> think that's your problem
<colomon> r: enum A <e1 e2 e3>; multi infix:«<»(A, A) { say "hello!"
}; say e1 < e2
<p6eval> rakudo 4373f0: OUTPUT«hello!True»
<colomon> yup
* masak submits rakudobug
<masak> tadzik++ colomon++ # golfing
Note particularly that the third-last evaluation (with multi infix:<<
< >>) doesn't work as intended, whereas the last one (with multi
infix:«<») does.