pugs-comm...@feather.perl6.nl wrote: > Author: masak > Date: 2009-03-14 13:34:42 +0100 (Sat, 14 Mar 2009) > New Revision: 25821 > > Modified: > docs/Perl6/Spec/S12-objects.pod > Log: > specced syntactic 'where' sugar in param lists > > Modified: docs/Perl6/Spec/S12-objects.pod > =================================================================== > --- docs/Perl6/Spec/S12-objects.pod 2009-03-13 15:44:50 UTC (rev 25820) > +++ docs/Perl6/Spec/S12-objects.pod 2009-03-14 12:34:42 UTC (rev 25821) > @@ -12,9 +12,9 @@ > > Maintainer: Larry Wall <la...@wall.org> > Date: 27 Oct 2004 > - Last Modified: 12 Mar 2009 > + Last Modified: 14 Mar 2009 > Number: 12 > - Version: 76 > + Version: 77 > > =head1 Overview > > @@ -1305,6 +1305,18 @@ > since all the type constraints in a signature parameter are just > anded together anyway. > > +You can leave out the block when matching against a literal value of some > +kind: > + > + multi sub fib ($n where 0|1) { return $n } > + multi sub fib (Int $n) { return fib($n-1) + fib($n-2) } > + > +In fact, you can leave out the 'where' declaration altogether: > + > + multi sub fib (0) { return 0 } > + multi sub fib (1) { return 1 } > + multi sub fib (Int $n) { return fib($n-1) + fib($n-2) }
As much as I like this new syntax, it's not as useful as it looks. multi sub fib (0) desugars to (Any $ where 0), which is just a type constraint in terms of multi dispatch. Which (Int $n) is also, so you actually get an "ambiguous dispatch" error in your example. Any thoughts on how that could be improved in a dwimmy way? Cheers, Moritz