summaryrefslogtreecommitdiff
path: root/compiler/GHC/Tc/Errors.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/GHC/Tc/Errors.hs')
-rw-r--r--compiler/GHC/Tc/Errors.hs11
1 files changed, 8 insertions, 3 deletions
diff --git a/compiler/GHC/Tc/Errors.hs b/compiler/GHC/Tc/Errors.hs
index 8b50d5e719..37dc095f71 100644
--- a/compiler/GHC/Tc/Errors.hs
+++ b/compiler/GHC/Tc/Errors.hs
@@ -438,8 +438,13 @@ reportImplic ctxt implic@(Implic { ic_skols = tvs
where
tcl_env = ic_env implic
insoluble = isInsolubleStatus status
- (env1, tvs') = mapAccumL tidyVarBndr (cec_tidy ctxt) tvs
- info' = tidySkolemInfo env1 info
+ (env1, tvs') = mapAccumL tidyVarBndr (cec_tidy ctxt) $
+ scopedSort tvs
+ -- scopedSort: the ic_skols may not be in dependency order
+ -- (see Note [Skolems in an implication] in GHC.Tc.Types.Constraint)
+ -- but tidying goes wrong on out-of-order constraints;
+ -- so we sort them here before tidying
+ info' = tidySkolemInfo env1 info
implic' = implic { ic_skols = tvs'
, ic_given = map (tidyEvVar env1) given
, ic_info = info' }
@@ -507,7 +512,7 @@ warnRedundantConstraints ctxt env info ev_vars
= any isImprovementPred (pred : transSuperClasses pred)
reportBadTelescope :: ReportErrCtxt -> TcLclEnv -> SkolemInfo -> [TcTyVar] -> TcM ()
-reportBadTelescope ctxt env (ForAllSkol _ telescope) skols
+reportBadTelescope ctxt env (ForAllSkol telescope) skols
= do { msg <- mkErrorReport ctxt env (important doc)
; reportError msg }
where