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? >