I made a comment on your blog which is awaiting moderation. Anyways here it
is for people on the mailing list:

I agree that being able to compose dispatchers and candidates procedurally
is very useful. And you can sorta do it. Check out:

https://github.com/LLFourn/p6-CompUnit-Util#dispatcher-manipulation

especially this line:
https://github.com/LLFourn/p6-CompUnit-Util/blob/master/lib/CompUnit/Util.pm6#L233
where I have to create a proto. This works but there is a serialization bug
which breaks precompilation if it's done at compile time.

but doing it at runtime should work:

sub create-proto($name) {
    my $proto = (my proto anon (|) {*}).clone;
    $proto.set_name($name);
    return $proto;
}

my $proto = create-proto('foo');
$proto.add_dispatchee(anon sub candidate1('one') { 'one' });
$proto.add_dispatchee(anon sub candidate2('two') { 'two' });

say $proto.('one');
say $proto.perl;
.say for $proto.candidates;


The above will work but it's quite fragile. Try assigning the sub to a
variable first and then .add_dispatchee (it will die). It definitely needs
a nicer interface. The design docs say that protos should have .push and
mentions that you should be able to do Proto.new.
https://design.perl6.org/S06.html#Introspection


On Mon, Feb 15, 2016 at 6:36 AM yary <not....@gmail.com> wrote:

> Back in June of last year some discussion about multi-subs got me
> thinking and posting about anonymous proto/multi routines here. It's
> been bubbling in the back of my mind since then, and as my Valentine
> to the language, I've posted my thoughts at
>
> http://blogs.perl.org/users/yary/2016/02/apropos-proto-perl6c-multi-thoughts.html
>
> It's a more coherent (I hope!) follow-up to
> https://www.mail-archive.com/perl6-language@perl.org/msg34937.html
>
> Would appreciate feedback on the merits or perils of exposing a way
> for creating a truly anonymous multi. It's something the design spec
> isn't explicit on.
>
> -y
>

Reply via email to