Properly reject higher-rank types during promotion/singling #406
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.
singletons
can't handle higher-rank types. You might think that these sorts of types would naturally be rejected when promoting or singling them, but that actually turns out not to be the case! (See #401 for examples of higher-rank types that squeeze through the cracks.)Luckily, the additional machinery that
th-desuguar
adds in goldfirere/th-desugar#125 makes it much easier to detect these. Instead of usingunravelDType
to decompose a function type (which permits all sorts of higher-rank gubbins), we use a restricted version calledunravelVanillaDType
, which throws an error if anything higher-rank is detected. SeeNote [Vanilla-type validity checking during promotion]
inD.S.Promote.Type
for a full explanation of what a "vanilla" type is.Fixes #401.