diff options
| author | Krzysztof Gogolewski <krzysztof.gogolewski@tweag.io> | 2020-10-02 03:39:25 +0200 |
|---|---|---|
| committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2020-10-10 14:50:42 -0400 |
| commit | 22f218b729a751bc5e5965624a716fc542f502a5 (patch) | |
| tree | bc2fc6d95107c9dd6d47bea254b2aa7900462374 /compiler | |
| parent | ea59fd4d0abe73e1127dcdd91855a39232e62d41 (diff) | |
| download | haskell-22f218b729a751bc5e5965624a716fc542f502a5.tar.gz | |
Linear types: fix quantification in GADTs (#18790)
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/GHC/Rename/HsType.hs | 8 | ||||
| -rw-r--r-- | compiler/GHC/Rename/Module.hs | 4 |
2 files changed, 9 insertions, 3 deletions
diff --git a/compiler/GHC/Rename/HsType.hs b/compiler/GHC/Rename/HsType.hs index 999d7b3287..9bd1fa64ac 100644 --- a/compiler/GHC/Rename/HsType.hs +++ b/compiler/GHC/Rename/HsType.hs @@ -31,6 +31,7 @@ module GHC.Rename.HsType ( extractHsTyRdrTyVars, extractHsTyRdrTyVarsKindVars, extractHsTysRdrTyVars, extractRdrKindSigVars, extractDataDefnKindVars, extractHsTvBndrs, extractHsTyArgRdrKiTyVars, + extractHsScaledTysRdrTyVars, forAllOrNothing, nubL ) where @@ -1748,6 +1749,9 @@ extractHsTyArgRdrKiTyVars args extractHsTyRdrTyVars :: LHsType GhcPs -> FreeKiTyVars extractHsTyRdrTyVars ty = extract_lty ty [] +extractHsScaledTysRdrTyVars :: [HsScaled GhcPs (LHsType GhcPs)] -> FreeKiTyVars -> FreeKiTyVars +extractHsScaledTysRdrTyVars args acc = foldr (\(HsScaled m ty) -> extract_lty ty . extract_hs_arrow m) acc args + -- | Extracts the free type/kind variables from the kind signature of a HsType. -- This is used to implicitly quantify over @k@ in @type T = Nothing :: Maybe k@. -- The left-to-right order of variables is preserved. @@ -1764,8 +1768,8 @@ extractHsTyRdrTyVarsKindVars (L _ ty) = -- | Extracts free type and kind variables from types in a list. -- When the same name occurs multiple times in the types, all occurrences -- are returned. -extractHsTysRdrTyVars :: [LHsType GhcPs] -> FreeKiTyVars -extractHsTysRdrTyVars tys = extract_ltys tys [] +extractHsTysRdrTyVars :: [LHsType GhcPs] -> FreeKiTyVars -> FreeKiTyVars +extractHsTysRdrTyVars tys = extract_ltys tys -- Returns the free kind variables of any explicitly-kinded binders, returning -- variable occurrences in left-to-right order. diff --git a/compiler/GHC/Rename/Module.hs b/compiler/GHC/Rename/Module.hs index 22b51ec30a..6605bf1993 100644 --- a/compiler/GHC/Rename/Module.hs +++ b/compiler/GHC/Rename/Module.hs @@ -2213,7 +2213,9 @@ rnConDecl decl@(ConDeclGADT { con_names = names -- See #14808. ; implicit_bndrs <- forAllOrNothing explicit_forall $ extractHsTvBndrs explicit_tkvs - $ extractHsTysRdrTyVars (theta ++ map hsScaledThing arg_tys ++ [res_ty]) + $ extractHsTysRdrTyVars theta + $ extractHsScaledTysRdrTyVars arg_tys + $ extractHsTysRdrTyVars [res_ty] [] ; let ctxt = ConDeclCtx new_names |
