Larry Wall wrote:
> On Mon, Nov 07, 2005 at 01:05:16PM +0100, TSa wrote:
> : With the introduction of kind capture variables ^T we could complety
> : drop the subtype special form. As you pointed out the adding of
> : constraints happens with the where clause anyway. Thus we return to
> : the usage of the compile time name assignment form
> :
> :   ::Blahh ::= ::Fasel where {...}
> :
> : where the :: in all cases means working on the MIR (Meta Information
> : Repository) which is the world of names (In Russian, Mir (Мир) means
> : "peace," and connotes "community." --- cited from Wikipedia).
>
> Except that a type declarator can remove the need for all those extra ::
> markers.  (Actually, the ::Fasel can be presumably written Fasel if
> Fasel is already declared, so the only strangeness is on the left.
> We could hack identifier-left-of ::= like we did identifier-left-of =>,
> or we could turn ::= into more of a general alias macro idea.  But I think
> people generally like declarators out to the left for readability.)

So, why not call the thing what it is---a set *type* declarator!

  set SmallInt of Int where { abs < 10 };

  set SomeNums of Num = (3.14, 4, 89, 23.42);

  set Bit of Int = (0,1);


Enumerations are then just sets of pairs

  set NumWords of Pair = { zero => 0, one => 1, two => 2, three => 3 };
                        # or with ( ... ) instead?

  enum NumWords = <zero one two three>; # short form of the above


Without the 'of' it doesn't look so good

  set Num SomeNums = (3.14, 4, 89, 23.43);

but OTOH, it looks nicely like

  my Num @SomeNums = (3.14, 4, 89, 23.43);

  my Int %NumWords = { zero => 0, one => 1, two => 2, three => 3 };

YMMV, though ;)


Does that work? Perhaps even while maintaining compatibility with the
set *value* creator sub that exists in Pugs, IIRC?

  my $x = set( 1, 2, 3 ); # $x contains a set reference at best
--
$TSa.greeting := "HaloO"; # mind the echo!

Reply via email to