ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> perl6-language
perl6-language
supertyping
by Jonathan Lang other posts by this author
Dec 13 2006 12:58AM messages near this date
Re: Gather/Take and threads | supertyping
Luke Palmer wrote:
>  When you say:
> 
>     role Foo superdoes Bar superdoes Baz {...}
> 
>  You are saying Foo = Bar (+) Baz (+) ...;  # union of Bar, Baz, and
>  the following spec

For the record, I think that "superdoes" should be spelled "done_by".

>  It may seem like that should be Foo = (Bar (+) Baz) (*) ...;  (indeed,
>  I thought that for a while and then corrected myself).  But if
>  anything that is a Bar is a Foo, anything that is a Baz is a Foo, and
>  some other stuff is also a Foo (this being the important case), then
>  that should clearly be a union.

Note that in your usage of the set operations, "Bar (+) Baz" requires
"Bar.^methods (*) Baz.^methods" and "Bar (*) Baz" requires
"Bar.^methods (+) Baz.^methods".  This means that the spec that
follows would act to further limit the methods that end up in Foo,
such that only methods that appear in Bar, Baz, _and_ the spec would
end up in Foo.  (As a secondary issue, your definition of "Bar (+)
Baz" strikes me as counterintuitive; but maybe that's because I tend
to view roles as sets of methods.)

>  Things work a little differently for required methods.  When a
>  superrole requires a method be implemented, we (the language
>  designers) have a choice to make: it is illegal if the superrole
>  requires a method that the subroles don't implement or don't
>  themselves require, or it simply adds the new method to the required
>  list of the subroles which don't implement it.  I'm inclined to say
>  the former, even though it seems a little more brittle.

I agree with your inclination; but bear in mind that this would make
it illegal to define Complex as a superrole of Num, since Complex has
methods that Num doesn't have.  Also bear in mind that if Complex is a
superrole of Num, a parameter that asks for a Num should by all rights
reject a Complex that's handed to it.

I agree with the idea of being able to define superroles (for lack of
a better name); my problems lie entirely with the proposed
implementation of the concept.  I'll reiterate my alternative:

When using set operations with roles, treat the roles as sets of
methods.  Each set operation defines an anonymous role with the
resulting set of methods; as with any other anonymous thing, it can be
bound to a name.  In addition, a few of the set operations establish
.does() relationships between the new role and the roles used to
create it:

   role C ::= A (+) B # C.does(A) and C.does(B)
   role D::= A (*) B # A.does(D) and B.does(D)
   role E ::= A (-) B # A.does(E)

and so on.  In particular, these lines would be equivalent to

   role C does A does B {}
   role D done_by A done_by B {}
   role E done_by A except B {}

...with the added benefit that you don't have any confusion as to how
"does", "done_by", "except", etc. interact with each other or with the
new spec.  Further, grouping of set operations makes it easy to define
"staged composition":

   (A (+) B) (*) C

would mean "compose an anonymous role as the union of A and B, and
then compose an anonymous role as the intersection of that and C".
Among other things, this would allow method definitions in C to
override those of the anonymous union.

--
Jonathan "Dataweaver" Lang
Thread:
Jonathan Lang
Jonathan Lang
Smylers
Larry Wall
TSa
TSa
Smylers
Ruud H.G. van Tol
Ruud H.G. van Tol
TSa

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved