I cannot reproduce:
% cat lib/A.rakumod
sub postfix:<!> ($n) is export {
when $n == 0 {return 1}
default {$n * ($n - 1)!}
}
% raku -e 'use lib "lib"; use A; say 42!'
1405006117752879898543142606244511569936384000000000
% raku -v
Welcome to Rakudo™ v2022.07-64-gce1af0fa0.
Implementing the Raku® Programming Language v6.d.
Built on MoarVM version 2022.07-16-g3ae8a31c1.
> On 14 Oct 2022, at 05:30, Joseph Polanik <[email protected]> wrote:
>
>
> On 10/13/22 9:19 PM, Ralph Mellor wrote:
>> On Fri, Oct 14, 2022 at 12:37 AM Joseph Polanik <[email protected]> wrote:
>>> I am trying to define '!' as the factorial operator. The following works
>>> in a .raku script file:
>>>
>>> sub postfix:<!> ($n) is export {
>>> when $n == 0 {return 1}
>>> default {$n * ($n - 1)!}
>>> }
>>>
>>> However when I tried to move this sub to a .rakumod file,
>>> it produces an error: Negation metaoperator not followed
>>> by valid infix.
>> That's because Raku isn't picking up your `sub`.
>>
>> I don't know why. It works for me. (v2022.02)
>>
>> Are you sure you're `use`ing it correctly and the `sub`
>> has the `is export`?
>
> Yes, the sub that defines the factorial operator is marked with 'is export'
> and the script that invokes my module (SequenceHelper) has a 'use' statement.
>
> The script is able to invoke other methods marked 'is export'; for example,
> the simple ver() and a method that generates an integer sequence:
>
> sub genSeq_IndexOps($limit, $f) is export {
> my @a = ();
> for (0...^$limit) -> $n {
> @a.push($f($n));
> }
> return @a;
> }
>
> So the module is being found and used. It seems as if certain methods aren't
> being found.
>
> I am not convinced that the problem I'm having is unrelated to the issue
> raised concerning the REPL. When I use the REPL, the results are the same.
>
> [0] > use SequenceHelper;
> Nil
> [1] > say ver();
> v0.0.1
> [1] > say 4!;
> ===SORRY!=== Error while compiling:
> Negation metaoperator not followed by valid infix
> [1] > put genSeq_IndexOps(15, -> $x {3**$x + 5**$x + 6**$x});
> 3 14 70 368 2002 11144 63010 360248 2076802 12050504 70290850 411802328
> 2421454402 14282991464 84472462690
>
> Regards,
>
> Joe
>