1
# operators defined in the setting
3
multi sub infix:<...> (@lhs, Code $generator) {
4
my $c = $generator.count;
6
fail 'the closure wants more parameters than given on the LHS';
10
if ?any( $generator.signature.params>>.<slurpy> ) {
11
while @r = $generator(|@result) {
15
# XXX work around http://rt.perl.org/rt3/Ticket/Display.html?id=66824
16
# this is a bit ugly.. since @a[1..1] returns a single item and not
17
# an array, |@result[$one-item-range] throws the error
18
# "argument doesn't array"
19
while @r = $generator(|@(@result[*-$c..*-1])) {
26
multi sub infix:<eqv> (Num $a, Num $b) { $a === $b }
27
multi sub infix:<eqv> (Str $a, Str $b) { $a === $b }
28
multi sub infix:<eqv> (Code $a, Code $b) { $a === $b }
29
multi sub infix:<eqv> (Positional $a, Positional $b) {
30
return Bool::False unless $a.WHAT === $b.WHAT;
31
return Bool::False unless $a.elems == $b.elems;
32
for @($a) Z @($b) -> $x, $y {
33
return Bool::False unless $x eqv $y;
38
multi sub infix:<eqv>(Pair $a, Pair $b) {
39
$a.key eqv $b.key && $a.value eqv $b.value;
42
multi sub infix:<eqv>(Mapping $a, Mapping $b) {
43
return Bool::False if +$a != +$b;
45
return Bool::False unless $b.exists($k);
46
return Bool::False unless $b.{$k} eqv $v;
51
multi sub infix:<eqv>(Failure $a, Failure $b) {
52
# do we have different values of undef yet?
53
# if so, how do I detect them?
57
multi sub infix:<eqv> ($a, $b) {
58
return Bool::False unless $a.WHAT === $b.WHAT;
59
return Bool::True if $a === $b;
60
die "infix:<eqv> is only implemented for certain special cases yet";
63
multi sub infix:<minmax>(@a, @b) {
64
(@a[0] min @b[0], @a[1] max @b[1]);
67
multi sub infix:<leg>($a, $b) {
71
sub prefix:<[//]>(*@a) {
79
sub prefix:<[||]>(*@a) {
87
sub infix:<!%>($a, $b) { ! ($a % $b) }
90
multi sub infix:<+>($a, $b) {
101
multi sub infix:<->($a, $b) {
112
multi sub infix:<*>($a, $b) {
123
multi sub infix:</>($a, $b) {
134
multi sub infix:<%>($a, $b) {
145
multi sub infix:<**>($a, $b) {
156
multi sub prefix:<->($a) {
166
multi sub prefix:<~>(Object $a) {
176
multi sub prefix:<~>(Multi $a) { $a.name }
178
multi sub infix:<!=>($a, $b) { !($a == $b) }
179
multi sub infix:<!==>($a, $b) { !($a == $b) }
180
multi sub infix:<ne>($a, $b) { !($a eq $b) }
181
multi sub infix:<!eq>($a, $b) { !($a eq $b) }