TC: Iterate typechecking function arguments #753
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.
Previously we would do a single pass over all function arguments left-to-right to instantiate the function quantifiers, but this sometimes fails in some cases, e.g.
where we can instantiate the quantifiers by:
First using the second argument to find 'm
Using the return type bits(5) to calculate 'n
Then checking the first argument
To solve this, we can defer any arguments where we failed to infer the type or got a unification error, then check them again. If we fail to make progress then stop.