On Wed, Jun 24, 2015 at 7:17 PM, Brent Laabs <bsla...@gmail.com> wrote: I'll just note that you can fake anon multi subs with lexical subs like this:
my $sub = do { proto foo (|) { * } multi foo (Int $x) { $x + 1 } multi foo (Str $y) { $y ~ 'a' } &foo; } say $sub("hello"); I like that, and I suspect it could be made generic (a routine that takes a list of subs, returning a multi-sub) without too much difficulty. The sub there is still named "foo" as attested by $sub.name, but isn't > available under that name outside of the do block. > I've found named lambdas very useful when debugging (in Javascript). Having $sub.name available is a feature as far as I'm concerned! On Wed, Jun 24, 2015 at 5:27 PM, Jon Lang <datawea...@gmail.com> wrote: Or, in the body, be able to examine the actual signature passed in and > decide what to do based on that, That [i]could[/i] be done using a > given/when structure, which would be equivalent to a list of signature/body > pairs. > > That works, but it means re-doing what the dispatcher already does. Nicer to hook into existing machinery. Shortly after writing my last message I realized that a "*signature*, *body *pair" is exactly a sub, and that what surprises me is that there isn't already a constructor that returns a multi-sub, given a list of subs. S06 says "proto is a generic wrapper around the dispatch to the multis" and "A proto is a generic dispatcher, which any given scope with a unique candidate list will instantiate into a dispatch routine" ... that's the machinery to hook into. I'm thinking of them as roles or types, when really they're attributes of Routine.