Support optional named arguments without a final unit in uncurried functions. #5907
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Functions with optional named arguments normally require a final unit (or some other unnamed argument) to specify the end of supplied arguments: https://rescript-lang.org/docs/manual/latest/function#optional-labeled-arguments
With uncurried functions, the number of arguments is fixed, and there is no such ambiguity.
This PR supports the use of optional named arguments without a final unit.
For example:
can now be applied omitting
x
asThere's one special case where all arguments are optional:
this can be applied without arguments as follows
Note that this application
foo(. )
normally supplies a single argument of typeunit
. However, the type offoo
is enough to disambiguate an interpret it as passing zero arguments whenfoo
does not take any unnamed arguments.This means in practice that uncurried functions are now strictly more expressive than curried ones.
foo(. )
, as empty application whenfoo
is an uncurried function which only has optional arguments.