Fix #16517 by bumping the TcLevel for method sigs

Authored by goldfire on Jun 5 2019, 5:02 PM.

Description

Fix Trac #16517 by bumping the TcLevel for method sigs

There were actually two bugs fixed here:

  1. candidateQTyVarsOfType needs to be careful that it does not try to zap metavariables from an outer scope as "naughty" quantification candidates. This commit adds a simple check to avoid doing so.
  1. We weren't bumping the TcLevel in kcHsKindSig, which was used only for class method sigs. This mistake led to the acceptance of

    class C a where meth :: forall k. Proxy (a :: k) -> ()

    Note that k is *locally* quantified. This patch fixes the problem by using tcClassSigType, which correctly bumps the level. It's a bit inefficient because tcClassSigType does other work, too, but it would be tedious to repeat much of the code there with only a few changes. This version works well and is simple.

And, while updating comments, etc., I noticed that tcRnType was
missing a pushTcLevel, leading to Trac #16767, which this patch also
fixes, by bumping the level. In the refactoring here, I also
use solveEqualities. This initially failed ghci/scripts/T15415,
but that was fixed by teaching solveEqualities to respect
-XPartialTypeSignatures.

This patch also cleans up some Notes around error generation that
came up in conversation.

Test case: typecheck/should_fail/T16517, ghci/scripts/T16767

(cherry picked from commit a22e51ea6f7a046c87d57ce30d143eef6abee9ff)
(cherry picked from commit 19ab32c5fb3ebd88927b94acf6b348facc1552a2)

Details

Committed
bgamariJun 19 2019, 11:39 AM
Parents
rGHCce6a492b6d2e: Fail fast in solveLocalEqualities
Branches
Unknown
Tags
Unknown