On Tue, May 03, 2005 at 05:06:15PM +0800, Autrijus Tang wrote:
: With the recent discussion on type sigils, and the fact that Pugs
: is moving toward the OO core, I'd like to inquire how the following
: statements evaluate (or not):
: 
:     # Compile time type arithmetic?
:     ::Dual ::= ::Str | ::Num;

Yes, but I think that is the same as

    our ::Dual ::= ::Str | ::Num;

which sets Dual in the current package, not in *.

Also, the :: is of course optional on the existing types.

:     $*Dual ::= ::Str | ::Num;

Probably works, assuming types autoenreference in scalar context so that

    $*Single ::= Str;

is equivalent to

    $*Single ::= \Str;

:     # Run time type arithmetic?
:     my ::dual := ::Str | ::Num;

Yes.

:     # Type Instantiation?
:     sub apply (&fun<::a> returns ::b, ::a $arg) returns ::b {
:       &fun($arg);
:     }

The first parameter would be &fun:(::a) these days, but yes.
(Stylistically, I'd leave the & off the call.)

:     # Does Role live in the same namespace as Types/Classes/Modules/Packages?
:     my ::role = role { ... };

Yes, though in this case that namespace is a subset of the lexical
namespace.

:     # Can class take type parameters like Roles cna?
:     class Pet[Type $petfood] {
:       method feed (::($petfood) $food) {...}
:     }

Don't think so.  I'd like to keep generics/parametric types associated
with roles if possible, so that we know exactly when they are composed
into a class.  If that means we have to write a few classes that do
nothing but wrap around a role, I think it's probably worth it.

:     # Single colon as tuple composer?
:     my $Triple                ::= :(Bool, Int, Str);
:     my $TripleTuple   ::= :($Triple, $Triple);
:     my &pair_with_int ::= -> Type ::t { :(::t, Int) };

I think of it as the signature composer.  Does Haskell call them
tuples?  That word tends to mean any immutable list in other circles,
though I suppose :(4, 2, "foo") could be construed as a type whose
values are constrained to single values.  But it makes :(int $x)
terribly ambiguous if it's an evaluative context.  (Which is why
we wanted :() in the first place, to avoid such evaluation.)

Larry

Reply via email to