Accumulate and report multiple errors when possible #24
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.
With this change, when one "branch" of a definition (e.g. component of a tuple, branch of a match or comatch, field of a record or codata type, or constructor of a datatype) fails to typecheck, instead of bailing out immediately with the error, we save it and continue typechecking the other branches. Any other branches that depend on a previous branch are ignored, as are those that typecheck correctly, but any errors produced by other branches that don't depend on a previous branch are accumulated and reported all together at the end. This way, for instance, if you're defining an ordered pair, you don't have to fix the first component before learning that there's also an error in the second component. For example:
(where
b
is underlined in the first error message anda
in the second).Current limitations include:
Σ A (_ ↦ B)
can't be used in the above example; even though the second component doesn't actually depend on the first, syntactically it might. This might be improvable with more laziness.