On Tue, Aug 08, 2006 at 11:42:15 +0000, Luke Palmer wrote: > I'm not up-to-date on coersion; last I checked it was hand-wavily > defined.
Currently it's a unary multimethod:
my $hamburger = $cow.as(Food);
However, the MMD rules are counterintuitive for dispatch rules.
The reason annotation came up is because I felt it shouldn't be a
parameter at all, but a nullary multimethod on the return value:
my $hamburger = $cow.as :: Food;
Larry had mentioned that &return.signature is basically the
invocation context.
If we do have a n ullary `as` the annotations are essentially
parameters on the anonymous function that is the CPS continuation.
That continuation's signature is used to perform MMD dispatch on
'as' by matching the --> stuff in opposite priority order.
The current problem is:
12:15 < audreyt> Point is Shape; 3DPoint is Point
12:15 < audreyt> er I mean Poind3d
12:15 < audreyt> Point3d
12:15 < audreyt> you have an object $o
12:15 < audreyt> you want to get back Point
12:15 < audreyt> say $o.as(Point).x
12:16 < audreyt> $o is actually of class Moose
12:16 < audreyt> Moose has
12:16 < audreyt> multi method as (Shape)
12:16 < audreyt> multi method as (Point3d)
12:16 < audreyt> if we list "as" using the normal MMD rule
12:16 < audreyt> proto as ($) {}
12:16 < audreyt> then Point comes in and Shape is selected
12:17 < audreyt> but we want Point3d
12:17 < audreyt> not Shape, to win
12:17 < nothingmuch> isn't .as(Point) going to fail if it
returns a Shape?
12:17 < nothingmuch> i mean
12:17 < nothingmuch> the rules here are reversed
12:17 < nothingmuch> Point is not a parameter to .as in the
natural sense
12:17 < audreyt> it is going to fail only if we consider the
return type
http://colabti.de/irclogger/irclogger_log/perl6?date=2006-08-08,Tue&sel=359#l545
for more discussion.
--
Yuval Kogman <[EMAIL PROTECTED]>
http://nothingmuch.woobling.org 0xEBD27418
pgpbTNX1bN0Zz.pgp
Description: PGP signature
