HaloO,

another self-reply :)

I've added a little hack that classifies strings
into these areas 0 to 3 to illustrate my idea of
a type lattice on which composes the background
of the Perl 6 Type System. Pattern matching and
type systems are related but the question for
Perl 6 is: how exactly?

The topmost type Any has a very nice mnemonic: it's
the any-junction of all types that have no direct
supertype---their lub. Likewise there could be a None
that is the none-junction of all types that have no
subtype---their glb.

This means the Any actually depends on the loaded
program. If it only uses e.g. the unrelated types
A, B and C then Any is A|B|C. Likewise for programs
that implicitly handle strings and do numerics one
gets Any = Str|Num.

BTW, are Num and Int distinct or is there a
relation: Int is/does Num?

Regards,
--
TSa (Thomas Sandlaß)

#! /usr/bin/perl

$s = @ARGV[0];

if ($s =~ /(^aa.*$)|(^.*bb$)/) # perl6: $s ~~ m:overlap/(^aa.*$)|(^.*bb$)/
{
   print "success:  <$1>  <$2>\n"; 
}
else
{
   print "match:  <$1>  <$2>\n";
}

if  ($s =~ /^aa.*$/  || $s =~ /^.*bb$/ || $s =~ /^.*aa.*bb.*$/) { print "<:      A|B\n";  }
if  ($s !~ /^aa.*$/  && $s !~ /^.*bb$/ && $s !~ /^.*aa.*bb.*$/) { print "<: none(A,B)\n"; }

if (($s =~ /^aa.*$/  && $s !~ /^.*bb$/) ||
    ($s !~ /^aa.*$/  && $s =~ /^.*bb$/)   )                     { print "<:      A^B\n";  }
if  ($s =~ /^aa.*$/)                                            { print "<:      A\n";    }
if  (                   $s =~ /^.*bb$/)                         { print "<:        B\n";  }
if  ($s =~ /^aa.*$/  && $s =~ /^.*bb$/)                         { print "<:      A&B\n";  }


print "===================================\n";

if  ($s =~ /(aa.*)/) { print "aa = $1\n"; }
if  ($s =~ /(.*bb)/) { print "bb = $1\n"; }

if  ($s =~ /aa.*/ || $s =~ /.*bb/)      { print "<:      A|B\n";  }
if  ($s !~ /aa.*/ && $s !~ /.*bb/)      { print "<: none(A,B)\n"; }

if (($s =~ /aa.*/  && $s !~ /.*bb/) ||
    ($s !~ /aa.*/  && $s =~ /.*bb/)   ) { print "<:      A^B\n";  }
if  ($s =~ /aa.*/)                      { print "<:      A\n";    }
if  (                 $s =~ /.*bb/)     { print "<:        B\n";  }
if  ($s =~ /aa.*/  && $s =~ /.*bb/)     { print "<:      A&B\n";  }



Reply via email to