That was always my goal for roles in the first place. I'll be a little sad if
Perl 6 requires an explicit notation to behave correctly here -- that is, if
the default check is for subtyping, not polymorphic equivalence.
What is "polymorphic equivalence" to you? I remember us discussion the
issue of duck typing versus nominal typing. I'll try to dig that out.
But here is a version from memory using John's pointlike role:
%h<x y new midpoint> = T.new(1), T.new(2), &new, &midpoint;
where &new and &midpoint refer to code objects with applicable
signature. Then I think that we have
%h.does(Point) === False;
%h.like(Point) === True;
with the second test being more elaborate and hence more expensive.
"The unavoidable price of reliability is simplicity" -- C.A.R. Hoare
1 + 2 + 3 + 4 + ... = -1/12 -- Srinivasa Ramanujan