On Thu, Feb 03, 2005 at 03:59:06PM -0800, Brent 'Dax' Royal-Gordon wrote: > Autrijus Tang <[EMAIL PROTECTED]> wrote: > > However, I'd still like to know whether my understanding on punning > > (same class 'Array' used as both Implementation Type and Value Type) > > and the validity of matching on "$var is TraitName" in subroutine > > signatures is correct. That, and types of hash keys. :) > > Either that, or the Ref value type is designed to wrap an > implementation type.
Can you elaborate? Do you mean the two below are equivalent?
# Something that agrees with the Perl5 model
my @array of Array;
my @array is Array of (Ref of (Any is Array) is Scalar)
> I'm not sure which is the case.
Another possible interpretation is that "of TraitName" automatically
exapnds to "of (Any is TraitName)", which will alleviate the need of a
separate "Ref" above:
# Something that does not quite agree with the Perl5 model
my @array of Array;
my @array is Array of (Any is Array of (Any is Scalar))
If so, may I consider it as equivalent to this Haskell code?
class TArray baseVtype elemVtype where {- ... -} -- Array Trait
class TScalar baseVtype where {- ... -} -- Scalar Trait
myArray :: (TArray t1 t2, TArray t2 t3, TScalar t3) => t1
That is, "myArray" matches any value type (t1) that is an instance of
the TArray type-class interface, with its elemVtype (t2) is also an
interface of TArray, and t2's elemVtype (t3) must be an instance of
the TScalar type-class. Which means this equivalency should hold:
Perl6 Trait <===> Haskell TypeClass
Perl6 ValueType <===> Haskell Type
Please let me know whether this interpretation is valid. :)
Thanks,
/Autrijus/
pgpFr8L2yNMBS.pgp
Description: PGP signature
