feat: reintroduce match constraint syntax #328
Merged
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.
This PR brings back the syntax for match constraints, modified to remove grammar ambiguities discovered with the previous syntax.
An example of the syntax is shown below:
The choice of
enf match
vsmatch enf
is intentional, and is intended to make the declaration of a constraint uniform, i.e. a constraint statement always begins withenf
whether it is a simple constraint, a constraint comprehension, or a match constraint.The implementation of this syntax simply compiles to a flat set of constraints for now, as if every branch of the match was a separate constraint conditioned on the selector for the match. This is handled directly in the parser for now, since we don't actually do anything meaningful with match constraints yet. Once we do, we'll update the parser accordingly and introduce distinct AST nodes to represent the construct.
I think we should still plan on eventually switching to block syntax for all "blocks" in the language, which was also discussed alongside the match syntax changes, but we were able to implement the latter without the former, so it is strictly speaking not necessary, but would make the grammar more regular (beneficial for any future syntax changes) and would improve the clarity of the language (IMO). In any case, that's a topic for a different discussion, but I wanted to make a note about it here for future reference.