diff options
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/rename/RnTypes.hs | 7 | ||||
-rw-r--r-- | compiler/typecheck/TcHsType.hs | 3 |
2 files changed, 8 insertions, 2 deletions
diff --git a/compiler/rename/RnTypes.hs b/compiler/rename/RnTypes.hs index 755ed206f0..1b1079d275 100644 --- a/compiler/rename/RnTypes.hs +++ b/compiler/rename/RnTypes.hs @@ -563,8 +563,9 @@ rnHsTyKi env t@(HsKindSig _ ty k) = do { checkPolyKinds env t ; kind_sigs_ok <- xoptM LangExt.KindSignatures ; unless kind_sigs_ok (badKindSigErr (rtke_ctxt env) ty) - ; (ty', fvs1) <- rnLHsTyKi env ty ; (k', fvs2) <- rnLHsTyKi (env { rtke_level = KindLevel }) k + ; (ty', fvs1) <- bindSigTyVarsFV (hsScopedKvs k') $ + rnLHsTyKi env ty ; return (HsKindSig noExt ty' k', fvs1 `plusFV` fvs2) } -- Unboxed tuples are allowed to have poly-typed arguments. These @@ -646,6 +647,10 @@ rnHsTyKi env (HsWildCardTy _) = do { checkAnonWildCard env ; return (HsWildCardTy noExt, emptyFVs) } +hsScopedKvs :: LHsType GhcRn -> [Name] +hsScopedKvs (L _ (HsForAllTy { hst_bndrs = tvs })) = hsLTyVarNames tvs +hsScopedKvs _ = [] + -------------- rnTyVar :: RnTyKiEnv -> RdrName -> RnM Name rnTyVar env rdr_name diff --git a/compiler/typecheck/TcHsType.hs b/compiler/typecheck/TcHsType.hs index c58a585356..21b9ee4bcb 100644 --- a/compiler/typecheck/TcHsType.hs +++ b/compiler/typecheck/TcHsType.hs @@ -587,7 +587,8 @@ tc_infer_hs_type mode (HsKindSig _ ty sig) -- things like instantiate its foralls, so it needs -- to be fully determined (#14904) ; traceTc "tc_infer_hs_type:sig" (ppr ty $$ ppr sig') - ; ty' <- tc_lhs_type mode ty sig' + ; ty' <- tcExtendTyVarEnv (fst (tcSplitForAllTys sig')) $ + tc_lhs_type mode ty sig' ; return (ty', sig') } -- HsSpliced is an annotation produced by 'RnSplice.rnSpliceType' to communicate |