Not in this case. The error happens at run-time. Syntactically the expression 
is a valid one because `5(...)` is interpreted as an invocation. Raku 
implements invocation protocol a part of which is method 'CALL-ME' defined on a 
class:

class Foo {
    method CALL-ME(|c) { say "Foo invoked with {c.raku}" } 
}
Foo(42, :foo(13));
Foo.new().();

Note that the protocol works for both a type object and its instantiation. This 
is what is basically happens in the case of `5(...)`: it falls back to `Int` 
and tries to invoke `CALL-ME` on it. One could say that it makes no sense, but 
an example with adding a fallback method has been already provided here. And 
here is another one follows:

my $foo = 5 but role { method CALL-ME(|c) { say "Int with ", c.raku } }; 
$foo(13);

The currently produced error, unfortunately, is confusing for beginners. But as 
soon as one gains more experience with Raku it makes clear sense instantly.

Best regards,
Vadim Belman

> On Mar 2, 2021, at 9:26 AM, Parrot Raiser <1parr...@gmail.com> wrote:
> 
>> Doing so would, of course, be a very bad idea.  But still, you _could_.
> 
> Something of an understatement, I think. :-)*
> 
> Seriously, this made me wonder if inscrutable error messages might be
> clarifed by a (reverse) trace of the last few steps in parsing. That
> would show you what the compiler thought ir was doing.
> 
> Would that be a) reasonably practical to implement, and b)
> sufficiently useful to justify the effort?
> 

Reply via email to