diff options
Diffstat (limited to 'compiler/GHC')
-rw-r--r-- | compiler/GHC/Hs/Types.hs | 39 | ||||
-rw-r--r-- | compiler/GHC/Rename/Source.hs | 2 |
2 files changed, 9 insertions, 32 deletions
diff --git a/compiler/GHC/Hs/Types.hs b/compiler/GHC/Hs/Types.hs index c250ec013e..bc7ba47434 100644 --- a/compiler/GHC/Hs/Types.hs +++ b/compiler/GHC/Hs/Types.hs @@ -56,8 +56,7 @@ module GHC.Hs.Types ( hsLTyVarName, hsLTyVarNames, hsLTyVarLocName, hsExplicitLTyVarNames, splitLHsInstDeclTy, getLHsInstDeclHead, getLHsInstDeclClass_maybe, splitLHsPatSynTy, - splitLHsForAllTy, splitLHsForAllTyInvis, - splitLHsQualTy, splitLHsSigmaTy, splitLHsSigmaTyInvis, + splitLHsForAllTyInvis, splitLHsQualTy, splitLHsSigmaTyInvis, splitHsFunType, hsTyGetAppHead_maybe, mkHsOpTy, mkHsAppTy, mkHsAppTys, mkHsAppKindTy, ignoreParens, hsSigType, hsSigWcType, @@ -1237,21 +1236,9 @@ splitLHsPatSynTy ty = (univs, reqs, exis, provs, ty4) (provs, ty4) = splitLHsQualTy ty3 -- | Decompose a sigma type (of the form @forall <tvs>. context => body@) --- into its constituent parts. --- --- Note that this function looks through parentheses, so it will work on types --- such as @(forall a. <...>)@. The downside to this is that it is not --- generally possible to take the returned types and reconstruct the original --- type (parentheses and all) from them. -splitLHsSigmaTy :: LHsType pass - -> ([LHsTyVarBndr pass], LHsContext pass, LHsType pass) -splitLHsSigmaTy ty - | (tvs, ty1) <- splitLHsForAllTy ty - , (ctxt, ty2) <- splitLHsQualTy ty1 - = (tvs, ctxt, ty2) - --- | Like 'splitLHsSigmaTy', but only splits type variable binders that were --- quantified invisibly (e.g., @forall a.@, with a dot). +-- into its constituent parts. Note that only /invisible/ @forall@s +-- (i.e., @forall a.@, with a dot) are split apart; /visible/ @forall@s +-- (i.e., @forall a ->@, with an arrow) are left untouched. -- -- This function is used to split apart certain types, such as instance -- declaration types, which disallow visible @forall@s. For instance, if GHC @@ -1269,20 +1256,10 @@ splitLHsSigmaTyInvis ty , (ctxt, ty2) <- splitLHsQualTy ty1 = (tvs, ctxt, ty2) --- | Decompose a type of the form @forall <tvs>. body@) into its constituent --- parts. --- --- Note that this function looks through parentheses, so it will work on types --- such as @(forall a. <...>)@. The downside to this is that it is not --- generally possible to take the returned types and reconstruct the original --- type (parentheses and all) from them. -splitLHsForAllTy :: LHsType pass -> ([LHsTyVarBndr pass], LHsType pass) -splitLHsForAllTy (L _ (HsParTy _ ty)) = splitLHsForAllTy ty -splitLHsForAllTy (L _ (HsForAllTy { hst_bndrs = tvs, hst_body = body })) = (tvs, body) -splitLHsForAllTy body = ([], body) - --- | Like 'splitLHsForAllTy', but only splits type variable binders that --- were quantified invisibly (e.g., @forall a.@, with a dot). +-- | Decompose a type of the form @forall <tvs>. body@ into its constituent +-- parts. Note that only /invisible/ @forall@s +-- (i.e., @forall a.@, with a dot) are split apart; /visible/ @forall@s +-- (i.e., @forall a ->@, with an arrow) are left untouched. -- -- This function is used to split apart certain types, such as instance -- declaration types, which disallow visible @forall@s. For instance, if GHC diff --git a/compiler/GHC/Rename/Source.hs b/compiler/GHC/Rename/Source.hs index f36a556224..6a84e30936 100644 --- a/compiler/GHC/Rename/Source.hs +++ b/compiler/GHC/Rename/Source.hs @@ -1834,7 +1834,7 @@ rnLDerivStrategy doc mds thing_inside do (via_ty', fvs1) <- rnHsSigType doc TypeLevel via_ty let HsIB { hsib_ext = via_imp_tvs , hsib_body = via_body } = via_ty' - (via_exp_tv_bndrs, _, _) = splitLHsSigmaTy via_body + (via_exp_tv_bndrs, _, _) = splitLHsSigmaTyInvis via_body via_exp_tvs = hsLTyVarNames via_exp_tv_bndrs via_tvs = via_imp_tvs ++ via_exp_tvs (thing, fvs2) <- extendTyVarEnvFVRn via_tvs thing_inside |