This started out some weeks ago as a user in #perl6 confused by an error
that gofled down to:

[28 19:01:37] <geekosaur> m: my Bool $x = False; $x()
[28 19:01:38] <camelia> rakudo-moar 0dc6f7: OUTPUTĀ«No such method 'CALL-ME'
for invocant of type 'Bool'

This is, at the very least, LTA. But it also got me thinking about the spec.

The obvious way to clean up the above, and some more complicated things of
the same sort, is to hide the obviously-internal CALL-ME behind a role,
which arguably should be part of the spec as well to let implementations
provide a stable interface while doing whatever is necessary for the
backend in its implementation. The obvious name for this role is Callable.
But, we already have a role Callable which is a mixin that adds
functionality to things that are callable, and is part of 6.c's spec. This
seems like a design flaw, and looks like it's going to be hard to fix, or
at least to make rational when other roles describe things that *are*
something instead of describing what they *modify*.

Is there a way forward on this that makes any sense?

(for the record, the proposed wrapper role looks something like

role OughtToBeCallable { # bikeshed pending paint job...
  method CALL(|c) {...}; # CALL-ME happens here

and the 4 places that currently build a CALL-ME in nqp would have a type
OughtToBeCallable added so that the runtime CALL-ME error becomes a
compile-time failed OughtToBeCallable constraint with a user-comprehensible

brandon s allbery kf8nh                               sine nomine associates                        
unix, openafs, kerberos, infrastructure, xmonad

Reply via email to