Skip to content

Instantly share code, notes, and snippets.

@gfldex
Created June 21, 2023 20:30
Show Gist options
  • Save gfldex/c6b3dc2f6c648907788d9c2f67508e35 to your computer and use it in GitHub Desktop.
Save gfldex/c6b3dc2f6c648907788d9c2f67508e35 to your computer and use it in GitHub Desktop.
multi sub trait_mod:<is>(Routine \r, :$renamed) {
role RenamedMulti[$name] {
method name { $name }
}
use nqp;
my Mu $do := nqp::getattr(nqp::decont(r), ForeignCode, '$!do');
nqp::setcodename($do, nqp::decont_s($renamed));
r does RenamedMulti[$renamed]
}
proto sub foo(|) is renamed<foo-proto> { * }
multi sub foo(Int $) is renamed<inter> { say &?ROUTINE.name }
multi sub foo(Str $) is renamed<stringer> { say &?ROUTINE.name }
multi sub foo(Failure) is renamed<failer> { fail('oi‽') }
foo(42);
foo('answer');
foo(Failure);
@gfldex
Copy link
Author

gfldex commented Jun 21, 2023

OUTPUT:

inter
stringer
oi‽
  in sub foo at tmp/2021-03-08.raku line 2416
  in block <unit> at tmp/2021-03-08.raku line 2420

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment