kind inference: report a kind error for wrong-kinded type alias arguments#904
Open
alpaylan wants to merge 1 commit into
Open
kind inference: report a kind error for wrong-kinded type alias arguments#904alpaylan wants to merge 1 commit into
alpaylan wants to merge 1 commit into
Conversation
…ents Applying a type alias to an argument of the wrong kind (e.g. `alias property<e> = () -> e bool` used as `property<console>` where `e :: E` but `console :: X`, or issue koka-lang#598's `stream<a,div>`) crashed the compiler with an internal assertion (Type.TypeVar.subNew.KindMismatch) instead of reporting an error, since resolveApp substituted alias arguments without checking their kinds. Check each parameter/argument pair: on a kind mismatch, report a standard kind error (via kindError, now exported from Kind.Unify) and substitute the parameter for itself to keep the expansion substitution well-kinded. Fixes koka-lang#598
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
The snippet below previously produced an internal error (I believe the same one in #598):
Applying a type alias to an argument of the wrong kind (e.g.
alias property<e> = () -> e boolused asproperty<console>wheree :: Ebutconsole :: X, or issue #598'sstream<a,div>) crashedthe compiler with an internal assertion (Type.TypeVar.subNew.KindMismatch)
instead of reporting an error, since resolveApp substituted alias
arguments without checking their kinds.
Check each parameter/argument pair: on a kind mismatch, report a
standard kind error (via kindError, now exported from Kind.Unify) and
substitute the parameter for itself to keep the expansion substitution
well-kinded.