my role Stringy { } multi sub infix:(Stringy:D \a, Stringy:D \b --> Bool:D) { nqp::hllbool( nqp::eqaddr(nqp::decont(a),nqp::decont(b)) || (nqp::eqaddr(a.WHAT,b.WHAT) && nqp::iseq_i(a cmp b,0)) ) } proto sub prefix:<~>($, *%) is pure {*} multi sub prefix:<~>(\a) { a.Stringy } multi sub prefix:<~>(int $a) { nqp::p6box_s($a) } multi sub prefix:<~>(num $a) { nqp::p6box_s($a) } proto sub infix:<~>(|) is pure {*} multi sub infix:<~>(--> '') { } multi sub infix:<~>($x --> Str:D) { $x.Stringy } proto sub infix:($?, $?, *%) is pure {*} multi sub infix:() { "infix:".no-zero-arg } multi sub infix:(\x) { x.Stringy } multi sub infix:($s, Num:D $n) { $n == Inf ?? NYI('Cat object') !! $s.Stringy x $n.Int; } multi sub infix:(\s, Any:D $n) { s.Stringy x $n.Int } multi sub infix:(\s, Any:U $n) { s.Stringy x $n.Numeric.Int } proto sub infix:($?, $?, *%) is pure {*} multi sub infix:( --> Bool::True) { } multi sub infix:(Any --> Bool::True) { } multi sub infix:(\a, \b) { a.Stringy eq b.Stringy } proto sub infix:(Mu $?, Mu $?, *%) is pure {*} multi sub infix:( --> Bool::True) { } multi sub infix:(Any --> Bool::True) { } multi sub infix:(Mu \a, Mu \b) { not a eq b } multi sub infix:(\a, \b) { a.Stringy ne b.Stringy } proto sub infix:($?, $?, *%) is pure {*} multi sub infix:( --> Bool::True) { } multi sub infix:(Any --> Bool::True) { } multi sub infix:(\a, \b) { a.Stringy lt b.Stringy } proto sub infix:($?, $?, *%) is pure {*} multi sub infix:( --> Bool::True) { } multi sub infix:(Any --> Bool::True) { } multi sub infix:(\a, \b) { a.Stringy le b.Stringy } proto sub infix:($?, $?, *%) is pure {*} multi sub infix:( --> Bool::True) { } multi sub infix:(Any --> Bool::True) { } multi sub infix:(\a, \b) { a.Stringy gt b.Stringy } proto sub infix:($?, $?, *%) is pure {*} multi sub infix:( --> Bool::True) { } multi sub infix:(Any --> Bool::True) { } multi sub infix:(\a, \b) { a.Stringy ge b.Stringy } proto sub infix:<~|>($?, $?, *%) is pure {*} multi sub infix:<~|>() { '' } multi sub infix:<~|>(\a ) { a.Stringy } multi sub infix:<~|>(\a, \b) { a.Stringy ~| b.Stringy } proto sub infix:<~^>($?, $?, *%) is pure {*} multi sub infix:<~^>() { '' } multi sub infix:<~^>(\a ) { a.Stringy } multi sub infix:<~^>(\a, \b) { a.Stringy ~^ b.Stringy } proto sub infix:<~&>($?, $?, *%) is pure {*} multi sub infix:<~&>() { "infix:<~&>".no-zero-arg } multi sub infix:<~&>(\a ) { a.Stringy } multi sub infix:<~&>(\a, \b) { a.Stringy ~& b.Stringy } proto sub prefix:<~^>($, *%) is pure {*} multi sub prefix:<~^>(\a) { ~^ a.Stringy } # vim: expandtab shiftwidth=4