# New Ticket Created by
# Please include the string: [perl #131742]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org/Ticket/Display.html?id=131742 >
Hi,
I have found some unexpected behaviour when attempting to redefine the
operator '>'.
First attempt, which works, but redefines 'gt' (however, as this is
defined for string comparisons I would prefer to use '>').
Code is:
multi infix:«gt»( Fpa:D $left, Fpa:D $right --> Bool) is
equiv(&infix:<gt>) { etc etc }
and called by:
my $xx = Fpa.fpaNew();
my $yy = Fpa.fpaNew();
$xx F= '+1133.100000000000000000';
$yy F= '+1133.900000000000000000'; # F+ $testValue;
say $xx.WHAT;
say $yy.WHAT;
if $xx gt $yy { say "OK! It is a \c[PENGUIN];" } else { say "It is not
a \c[PENGUIN]"; }
gives result:
perl6-m ./FPArithTest2.pm6
(Fpa)
(Fpa)
It is not a 🐧
So far, as expected.
Now I amend code to use '>' operator:
multi infix:«>»( Fpa:D $left, Fpa:D $right --> Bool) is
equiv(&infix:<gt>) { .... etc etc }
and called by
my $xx = Fpa.fpaNew();
my $yy = Fpa.fpaNew();
$xx F= '+1133.100000000000000000';
$yy F= '+1133.900000000000000000';
say $xx.WHAT;
say $yy.WHAT;
if $xx > $yy { say "OK! It is a \c[PENGUIN];" } else { say "It is not a
\c[PENGUIN]"; }
now gives result:
perl6-m ./FPArithTest2.pm6
(Fpa)
(Fpa)
Cannot resolve caller Real(FPArith:<0.0.1>::EXPORT::DEFAULT::Fpa: );
none of these signatures match:
(Mu:U \v: *%_)
in block <unit> at ./FPArithTest2.pm6 line 15
which I cannot understand as the $xx.WHAT and $yy.WHAT show both are
Fpa type objects, so should match the 'multi infix:«>»( Fpa:D ...,
Fpa:D .. ) definitions in the multi. (Well, that is my intention.)
The difference between the first (working) example and the second is
just the name of the operator.
OK, so now I try to use 'F>' as this may be a more obvious API:
Here is the API:
multi infix:«F>»( Fpa:D $left, Fpa:D $right --> Bool) is
equiv(&infix:<gt>) { ... etc etc }
and the invoking test:
my $xx = Fpa.fpaNew();
my $yy = Fpa.fpaNew();
$xx F= '+1133.100000000000000000';
$yy F= '+1133.900000000000000000';
say $xx.WHAT;
say $yy.WHAT;
if $xx F> $yy { say "OK! It is a \c[PENGUIN];" } else { say "It is not
a \c[PENGUIN]"; }
Which gives result:
perl6-m ./FPArithTest2.pm6
===SORRY!=== Error while compiling
/home/aparker/Documents/FixedPointArithmetic/./FPArithTest2.pm6
Missing block
at /home/aparker/Documents/FixedPointArithmetic/./FPArithTest2.pm6:15
------> if $xx⏏ F> $yy { say "OK! It is a \c[PENGUIN];"
expecting any of:
block or pointy block
infix
infix stopper
Are these results bugs or I am doing some wrong here?
Regards,
Andrew N Parker