Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Eat our own unicode operator dogfood
  • Loading branch information
lizmat committed May 19, 2015
1 parent 4924f04 commit f4de5f3
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 73 deletions.
126 changes: 73 additions & 53 deletions src/core/precedence.pm
Expand Up @@ -76,59 +76,79 @@ BEGIN {

trait_mod:<is>(&infix:<~>, :prec($concatenation));

trait_mod:<is>(&infix:<&>, :prec($junctive_and));
trait_mod:<is>(&infix:<(&)>, :prec($junctive_and));
trait_mod:<is>(&infix:<<"\x2229">>, :prec($junctive_and));
trait_mod:<is>(&infix:<(.)>, :prec($junctive_and));
trait_mod:<is>(&infix:<<"\x228D">>, :prec($junctive_and));

trait_mod:<is>(&infix:<|>, :prec($junctive_or));
trait_mod:<is>(&infix:<^>, :prec($junctive_or));
trait_mod:<is>(&infix:<(+)>, :prec($junctive_or));
trait_mod:<is>(&infix:<<"\x228E">>, :prec($junctive_or));
trait_mod:<is>(&infix:<(|)>, :prec($junctive_or));
trait_mod:<is>(&infix:<<"\x222A">>, :prec($junctive_or));
trait_mod:<is>(&infix:<(-)>, :prec($junctive_or));
trait_mod:<is>(&infix:<<"\x2216">>, :prec($junctive_or));
trait_mod:<is>(&infix:<(^)>, :prec($junctive_or));
trait_mod:<is>(&infix:<<"\x2296">>, :prec($junctive_or));

trait_mod:<is>(&infix:<==>, :prec($chaining));
trait_mod:<is>(&infix:<!=>, :prec($chaining));
trait_mod:<is>(&infix:<eq>, :prec($chaining));
trait_mod:<is>(&infix:<ne>, :prec($chaining));
trait_mod:<is>(&infix:<le>, :prec($chaining));
trait_mod:<is>(&infix:<ge>, :prec($chaining));
trait_mod:<is>(&infix:<lt>, :prec($chaining));
trait_mod:<is>(&infix:<gt>, :prec($chaining));
trait_mod:<is>(&infix:<=:=>, :prec($chaining));
trait_mod:<is>(&infix:<===>, :prec($chaining));
trait_mod:<is>(&infix:<eqv>, :prec($chaining));
trait_mod:<is>(&infix:<before>, :prec($chaining));
trait_mod:<is>(&infix:<after>, :prec($chaining));
trait_mod:<is>(&infix:<~~>, :prec($chaining));
trait_mod:<is>(&infix:<(elem)>, :prec($chaining));
trait_mod:<is>(&infix:<<"\x2208">>, :prec($chaining));
trait_mod:<is>(&infix:<<"\x2209">>, :prec($chaining));
trait_mod:<is>(&infix:<(cont)>, :prec($chaining));
trait_mod:<is>(&infix:<<"\x220B">>, :prec($chaining));
trait_mod:<is>(&infix:<<"\x220C">>, :prec($chaining));
trait_mod:<is>(&infix:<<(<)>>, :prec($chaining));
trait_mod:<is>(&infix:<<"\x2282">>, :prec($chaining));
trait_mod:<is>(&infix:<<"\x2284">>, :prec($chaining));
trait_mod:<is>(&infix:<<(>)>>, :prec($chaining));
trait_mod:<is>(&infix:<<"\x2283">>, :prec($chaining));
trait_mod:<is>(&infix:<<"\x2285">>, :prec($chaining));
trait_mod:<is>(&infix:<<(<=)>>, :prec($chaining));
trait_mod:<is>(&infix:<<"\x2286">>, :prec($chaining));
trait_mod:<is>(&infix:<<"\x2288">>, :prec($chaining));
trait_mod:<is>(&infix:<<(>=)>>, :prec($chaining));
trait_mod:<is>(&infix:<<"\x2287">>, :prec($chaining));
trait_mod:<is>(&infix:<<"\x2289">>, :prec($chaining));
trait_mod:<is>(&infix:<<(<+)>>, :prec($chaining));
trait_mod:<is>(&infix:<<"\x227C">>, :prec($chaining));
trait_mod:<is>(&infix:<<(>+)>>, :prec($chaining));
trait_mod:<is>(&infix:<<"\x227D">>, :prec($chaining));
trait_mod:<is>(&infix:<&>, :prec($junctive_and));
trait_mod:<is>(&infix:<(&)>, :prec($junctive_and));
# U+2229 INTERSECTION
trait_mod:<is>(&infix:<>, :prec($junctive_and));
trait_mod:<is>(&infix:<(.)>, :prec($junctive_and));
# U+228D MULTISET MULTIPLICATION
trait_mod:<is>(&infix:<>, :prec($junctive_and));

trait_mod:<is>(&infix:<|>, :prec($junctive_or));
trait_mod:<is>(&infix:<^>, :prec($junctive_or));
trait_mod:<is>(&infix:<(+)>, :prec($junctive_or));
# U+228E MULTISET UNION
trait_mod:<is>(&infix:<>, :prec($junctive_or));
trait_mod:<is>(&infix:<(|)>, :prec($junctive_or));
# U+222A UNION
trait_mod:<is>(&infix:<>, :prec($junctive_or));
trait_mod:<is>(&infix:<(-)>, :prec($junctive_or));
# U+2216 SET MINUS
trait_mod:<is>(&infix:<>, :prec($junctive_or));
trait_mod:<is>(&infix:<(^)>, :prec($junctive_or));
# U+2296 CIRCLED MINUS
trait_mod:<is>(&infix:<>, :prec($junctive_or));

trait_mod:<is>(&infix:<==>, :prec($chaining));
trait_mod:<is>(&infix:<!=>, :prec($chaining));
trait_mod:<is>(&infix:<eq>, :prec($chaining));
trait_mod:<is>(&infix:<ne>, :prec($chaining));
trait_mod:<is>(&infix:<le>, :prec($chaining));
trait_mod:<is>(&infix:<ge>, :prec($chaining));
trait_mod:<is>(&infix:<lt>, :prec($chaining));
trait_mod:<is>(&infix:<gt>, :prec($chaining));
trait_mod:<is>(&infix:<=:=>, :prec($chaining));
trait_mod:<is>(&infix:<===>, :prec($chaining));
trait_mod:<is>(&infix:<eqv>, :prec($chaining));
trait_mod:<is>(&infix:<before>, :prec($chaining));
trait_mod:<is>(&infix:<after>, :prec($chaining));
trait_mod:<is>(&infix:<~~>, :prec($chaining));
trait_mod:<is>(&infix:<(elem)>, :prec($chaining));
# U+2208 ELEMENT OF
trait_mod:<is>(&infix:<>, :prec($chaining));
# U+2209 NOT AN ELEMENT OF
trait_mod:<is>(&infix:<>, :prec($chaining));
trait_mod:<is>(&infix:<(cont)>, :prec($chaining));
# U+220B CONTAINS AS MEMBER
trait_mod:<is>(&infix:<>, :prec($chaining));
# U+220C DOES NOT CONTAIN AS MEMBER
trait_mod:<is>(&infix:<>, :prec($chaining));
trait_mod:<is>(&infix:<<(<)>>, :prec($chaining));
# U+2282 SUBSET OF
trait_mod:<is>(&infix:<>, :prec($chaining));
# U+2284 NOT A SUBSET OF
trait_mod:<is>(&infix:<>, :prec($chaining));
trait_mod:<is>(&infix:<<(>)>>, :prec($chaining));
# U+2283 SUPERSET OF
trait_mod:<is>(&infix:<>, :prec($chaining));
# U+2285 NOT A SUPERSET OF
trait_mod:<is>(&infix:<>, :prec($chaining));
trait_mod:<is>(&infix:<<(<=)>>, :prec($chaining));
# U+2286 SUBSET OF OR EQUAL TO
trait_mod:<is>(&infix:<>, :prec($chaining));
# U+2288 NEITHER A SUBSET OF NOR EQUAL TO
trait_mod:<is>(&infix:<>, :prec($chaining));
trait_mod:<is>(&infix:<<(>=)>>, :prec($chaining));
# U+2287 SUPERSET OF OR EQUAL TO
trait_mod:<is>(&infix:<>, :prec($chaining));
# U+2289 NEITHER A SUPERSET OF NOR EQUAL TO
trait_mod:<is>(&infix:<>, :prec($chaining));
trait_mod:<is>(&infix:<<(<+)>>, :prec($chaining));
# U+227C PRECEDES OR EQUAL TO
trait_mod:<is>(&infix:<>, :prec($chaining));
trait_mod:<is>(&infix:<<(>+)>>, :prec($chaining));
# U+227D SUCCEEDS OR EQUAL TO
trait_mod:<is>(&infix:<>, :prec($chaining));

trait_mod:<is>(&infix:<..>, :prec($structural));
trait_mod:<is>(&infix:<^..>, :prec($structural));
Expand Down
40 changes: 20 additions & 20 deletions src/core/set_operators.pm
Expand Up @@ -7,11 +7,11 @@ multi sub infix:<(elem)>($a, Set $b --> Bool) {
$b.EXISTS-KEY($a);
}
# U+2208 ELEMENT OF
only sub infix:<<"\x2208">>($a, $b --> Bool) {
only sub infix:<>($a, $b --> Bool) {
$a (elem) $b;
}
# U+2209 NOT AN ELEMENT OF
only sub infix:<<"\x2209">>($a, $b --> Bool) {
only sub infix:<>($a, $b --> Bool) {
$a !(elem) $b;
}

Expand All @@ -23,11 +23,11 @@ multi sub infix:<(cont)>(Set $a, $b --> Bool) {
$a.EXISTS-KEY($b);
}
# U+220B CONTAINS AS MEMBER
only sub infix:<<"\x220B">>($a, $b --> Bool) {
only sub infix:<>($a, $b --> Bool) {
$a (cont) $b;
}
# U+220C DOES NOT CONTAIN AS MEMBER
only sub infix:<<"\x220C">>($a, $b --> Bool) {
only sub infix:<>($a, $b --> Bool) {
$a !(cont) $b;
}

Expand All @@ -53,7 +53,7 @@ only sub infix:<(|)>(**@p) {
}
}
# U+222A UNION
only sub infix:<<"\x222A">>(|p) {
only sub infix:<>(|p) {
infix:<(|)>(|p);
}

Expand Down Expand Up @@ -93,7 +93,7 @@ only sub infix:<(&)>(**@p) {
}
}
# U+2229 INTERSECTION
only sub infix:<<"\x2229">>(|p) {
only sub infix:<>(|p) {
infix:<(&)>(|p);
}

Expand Down Expand Up @@ -133,14 +133,14 @@ only sub infix:<(-)>(**@p) {
}
}
# U+2216 SET MINUS
only sub infix:<<"\x2216">>(|p) {
only sub infix:<>(|p) {
infix:<(-)>(|p);
}
only sub infix:<(^)>(**@p) {
Set.new(BagHash.new(@p.map(*.Set(:view).keys)).pairs.map({.key if .value == 1}));
}
# U+2296 CIRCLED MINUS
only sub infix:<<"\x2296">>($a, $b --> Setty) {
only sub infix:<>($a, $b --> Setty) {
$a (^) $b;
}

Expand All @@ -160,11 +160,11 @@ multi sub infix:<<(<=)>>(Setty $a, Setty $b --> Bool) {
$a <= $b and so $a.keys.all (elem) $b
}
# U+2286 SUBSET OF OR EQUAL TO
only sub infix:<<"\x2286">>($a, $b --> Bool) {
only sub infix:<>($a, $b --> Bool) {
$a (<=) $b;
}
# U+2288 NEITHER A SUBSET OF NOR EQUAL TO
only sub infix:<<"\x2288">>($a, $b --> Bool) {
only sub infix:<>($a, $b --> Bool) {
$a !(<=) $b;
}

Expand All @@ -176,11 +176,11 @@ multi sub infix:<<(<)>>(Setty $a, Setty $b --> Bool) {
$a < $b and so $a.keys.all (elem) $b;
}
# U+2282 SUBSET OF
only sub infix:<<"\x2282">>($a, $b --> Bool) {
only sub infix:<>($a, $b --> Bool) {
$a (<) $b;
}
# U+2284 NOT A SUBSET OF
only sub infix:<<"\x2284">>($a, $b --> Bool) {
only sub infix:<>($a, $b --> Bool) {
$a !(<) $b;
}

Expand All @@ -192,11 +192,11 @@ multi sub infix:<<(>=)>>(Setty $a, Setty $b --> Bool) {
$a >= $b and so $b.keys.all (elem) $a;
}
# U+2287 SUPERSET OF OR EQUAL TO
only sub infix:<<"\x2287">>($a, $b --> Bool) {
only sub infix:<>($a, $b --> Bool) {
$a (>=) $b;
}
# U+2289 NEITHER A SUPERSET OF NOR EQUAL TO
only sub infix:<<"\x2289">>($a, $b --> Bool) {
only sub infix:<>($a, $b --> Bool) {
$a !(>=) $b;
}

Expand All @@ -208,11 +208,11 @@ multi sub infix:<<(>)>>(Setty $a, Setty $b --> Bool) {
$a > $b and so $b.keys.all (elem) $a;
}
# U+2283 SUPERSET OF
only sub infix:<<"\x2283">>($a, $b --> Bool) {
only sub infix:<>($a, $b --> Bool) {
$a (>) $b;
}
# U+2285 NOT A SUPERSET OF
only sub infix:<<"\x2285">>($a, $b --> Bool) {
only sub infix:<>($a, $b --> Bool) {
$a !(>) $b;
}

Expand Down Expand Up @@ -244,7 +244,7 @@ only sub infix:<(.)>(**@p) {
}
}
# U+228D MULTISET MULTIPLICATION
only sub infix:<<"\x228D">>(|p) {
only sub infix:<>(|p) {
infix:<(.)>(|p);
}

Expand All @@ -270,7 +270,7 @@ only sub infix:<(+)>(**@p) {
}
}
# U+228E MULTISET UNION
only sub infix:<<"\x228E">>(|p) {
only sub infix:<>(|p) {
infix:<(+)>(|p);
}

Expand All @@ -289,7 +289,7 @@ multi sub infix:<<(<+)>>(QuantHash $a, QuantHash $b --> Bool) {
True;
}
# U+227C PRECEDES OR EQUAL TO
only sub infix:<<"\x227C">>($a, $b --> Bool) {
only sub infix:<>($a, $b --> Bool) {
$a (<+) $b;
}

Expand All @@ -308,7 +308,7 @@ multi sub infix:<<(>+)>>(Any $a, Any $b --> Bool) {
}
}
# U+227D SUCCEEDS OR EQUAL TO
only sub infix:<<"\x227D">>($a, $b --> Bool) {
only sub infix:<>($a, $b --> Bool) {
$a (>+) $b;
}

Expand Down

0 comments on commit f4de5f3

Please sign in to comment.