.?
The .?
operator allows one to catch a method that is undefined or that fails a precondition, and in so doing possibly support some kind of overloading / duck typing.
If we treat methods that are not defined as methods that always fail a precondition, we can simply say that x.?foo
returns [x.foo]
when x.foo
passes all preconditions, and []
otherwise.
A postcondition failure is another matter, though ...