> -----Original Message----- > From: Luke Palmer [mailto:[EMAIL PROTECTED] > Sent: Saturday, December 13, 2003 9:30 AM > To: Andy Wardley; Larry Wall; Perl6; [EMAIL PROTECTED] > Subject: Re: enums and bitenums > > > Andy Wardley writes: > > Larry Wall wrote: > > > Well, we can't use -> because we're using that for something else. > > > But it's certainly true that we'll have to have some mechanism for > > > disambiguating Color.green from Blackberry.green. After all, > > > > > > Blackberry.green == Color.red > > > > > > Or maybe it's > > > > > > Blackberry::green == Color::red > > > > [...] > > > > > I don't know the syntax for > > > disambiguating on the green end yet. Maybe one of > > > > > > $foo ~~ Color::green > > > $foo ~~ Color.green > > > $foo ~~ Color[green] > > > > > > Or maybe something else. > > > > How about a single colon? > > > > Color:green > > > > This is the same syntax employed in XML namespaces and URIs, > for example: > > > > <xml xmlns:color="http://example.com/xml/color.xsd"> > > <color:green/> > > </xml> > > > > Don't tell me, we can't use : because we're using that for something > > else. :-) > > Well, yes. It's used in the operator position already for the indirect > object syntax, so I don't think that'll fly.
Also, as Larry pointed out there's likely to be the need to talk about multiple values. Color[green|red] is better in a lot of ways than Color::green|Color::red. > Keeping with the color example, let's think about what this is doing: > > $foo ~~ green > > That ought to work even if you set "green" by saying: > > $foo.Color = (0,1,0); > > So it seems more that "green" is doubling as a predicate and a value. > Indeed, you could think of setting something to green as setting it to > "pure green" (0,1,0), but testing "green" as anything that looks > greenish -> $r,$g,$b { $g > $r + $b }. > > Maybe it's a subtype[1] of the property with a default value? > > That gets me thinking about how to declare that. If a subtype is like a > parameter to the class that the class didn't really declare, I could > imagine a syntax like this: > > constraint Color[green] { $.g > $.r + $.b } > > That makes me woosy, though. Maybe digging up the adverbial modifier > C<where> should stir some ideas. > > constraint green is Color { $.g > $.r + $.b } > > my Color where green $spinach; I don't understand where you were going with that. > Maybe we'd better leave that one buried. Speaking of predicate/value mixups: role green does Color[$.g > $.r + $.b] does { method .VALUE { return (0,1,0); } }; Then: my Color $g = green; my Color $c = (random(), random(), random()); if $c == $g { print "That's GREEN!"; } elsif $c ~~ green { print "Well, it's greenish"; } > For some reason, subtypes don't feel like roles to me. They're not so > much behaviors are they are constraints... on behavior. Like the > opposite of roles, actually. > > Oh, we were talking about enums, right? Um. Yeah. > > Luke > > [1] There's a term to add to the vocab sheet. AFAIK, a subtype is a > variation on a normal type that has some constraint applied to it. > Think vague. >