New Issue: Proposal to make 'Reflection.canResolve()' more general

17859, "vasslitvinov", "Proposal to make 'Reflection.canResolve()' more general", "2021-05-29T15:27:37Z"

Currently the canResolve() family of functions in the Reflection standard module report resolvability of a single function call. Such a call is written with the function name as an argument to canResolve, rather than using the normal call syntax.

This issue proposes a language feature that will enable functions that report resolvability of an entire expression or of a block of code that is written using the normal syntax.

This language feature is: "possibly erroneous" closures or FCFs (first-class functions). "Possibly erroneous" means that they are allowed to contain resolution errors.

  • When the compiler encounters such a closure or FCF, it goes proceeds to resolving it as usual.

  • If resolution succeeds, the result behaves just like a normal closure or FCF: it can be passed around, evaluated, queried for its result type.

  • If resolution fails, no error is reported to the user. The result behaves like the nothing value.

  • In either case, the resulting value provides a method (or perhaps a function) that indicates whether resolution succeeded.

This feature enables:

  • defining a flavor of canResolve that is a syntactic sugar for creating a possibly-erroneous closure/FSF then querying the result whether its resolution succeeded;

  • writing code that executes a block of code if it is resolvable and does something else otherwise.