[Git][ghc/ghc][wip/T25647] flip the classVar to TyVarTv to observe any breakage

Patrick (@soulomoon) gitlab at gitlab.haskell.org
Sun Feb 16 21:26:25 UTC 2025



Patrick pushed to branch wip/T25647 at Glasgow Haskell Compiler / GHC


Commits:
cc2f13c6 by Patrick at 2025-02-17T05:26:13+08:00
flip the classVar to TyVarTv to observe any breakage

- - - - -


4 changed files:

- compiler/GHC/Tc/Gen/HsType.hs
- compiler/GHC/Tc/Instance/Class.hs
- compiler/GHC/Tc/TyCl.hs
- compiler/GHC/Tc/TyCl/Instance.hs


Changes:

=====================================
compiler/GHC/Tc/Gen/HsType.hs
=====================================
@@ -1285,7 +1285,7 @@ tcHsType mode rn_ty@(HsAppKindTy{}) exp_kind = tc_app_ty mode rn_ty exp_kind
 tcHsType mode rn_ty@(HsOpTy{})      exp_kind = tc_app_ty mode rn_ty exp_kind
 
 tcHsType mode rn_ty@(HsKindSig _ ty sig) exp_kind
-  = do { let mode' = (updateFamArgType ClassArg $ mode { mode_tyki = KindLevel})
+  = do { let mode' = (updateFamArgType SigArg $ mode { mode_tyki = KindLevel})
        ; sig' <- tc_lhs_kind_sig mode' KindSigCtxt sig
                  -- We must typecheck the kind signature, and solve all
                  -- its equalities etc; from this point on we may do
@@ -2258,6 +2258,8 @@ tcAnonWildCardOcc is_extra (TcTyMode { mode_holes = Just (hole_lvl, hole_mode) }
                HM_TyAppPat  -> fsLit "_"
      mk_wc_details = case hole_mode of
                       HM_FamPat FreeArg -> newTyVarMetaVarDetailsAtLevel
+                      HM_FamPat ClassArg -> newTyVarMetaVarDetailsAtLevel
+                      HM_FamPat SigArg -> newTauTvDetailsAtLevel
                       _ -> newTauTvDetailsAtLevel
      emit_holes = case hole_mode of
                      HM_Sig       -> True


=====================================
compiler/GHC/Tc/Instance/Class.hs
=====================================
@@ -39,7 +39,7 @@ import GHC.Types.FieldLabel
 import GHC.Types.Name.Reader
 import GHC.Types.SafeHaskell
 import GHC.Types.Name   ( Name )
-import GHC.Types.Var.Env ( VarEnv, lookupVarEnv )
+import GHC.Types.Var.Env ( VarEnv, lookupVarEnv, elemVarEnv )
 import GHC.Types.Id
 import GHC.Types.Var
 
@@ -102,13 +102,9 @@ assocInstInfoPartialAssocInstInfo (InClsInst {..}) = Just (ai_class, ai_tyvars,
 
 buildAssocInstInfo :: TyCon -> PartialAssocInstInfo -> AssocInstInfo
 buildAssocInstInfo _fam_tc Nothing = NotAssociated
-buildAssocInstInfo fam_tc (Just (cls, tvs, env)) = InClsInst cls tvs env argTypes
-  where
-    argTypes
-      = [ toArgType $ lookupVarEnv env fam_tc_tv | fam_tc_tv <- tyConTyVars fam_tc]
-      where
-        toArgType Nothing = FreeArg
-        toArgType _ = ClassArg
+buildAssocInstInfo fam_tc (Just (cls, tvs, env))
+  = InClsInst cls tvs env
+  [ if elemVarEnv fam_tc_tv env then ClassArg else FreeArg  | fam_tc_tv <- tyConTyVars fam_tc]
 
 buildPatsArgTypes :: (Outputable x) => AssocInstInfo -> [x] -> [(x, FamArgType)]
 buildPatsArgTypes NotAssociated xs = buildPatsModeTypes FreeArg xs
@@ -117,11 +113,12 @@ buildPatsArgTypes (InClsInst {..}) xs = zip xs (ai_arg_types ++ cycle [FreeArg])
 buildPatsModeTypes :: FamArgType -> [x] -> [(x, FamArgType)]
 buildPatsModeTypes fa xs = (,fa) <$> xs
 
-data FamArgType = ClassArg | FreeArg deriving (Eq, Show)
+data FamArgType = ClassArg | FreeArg | SigArg deriving (Eq, Show)
 
 instance Outputable FamArgType where
   ppr ClassArg = text "ClassArg"
   ppr FreeArg = text "FreeArg"
+  ppr SigArg = text "SigArg"
 
 isNotAssociated :: AssocInstInfo -> Bool
 isNotAssociated (NotAssociated {}) = True


=====================================
compiler/GHC/Tc/TyCl.hs
=====================================
@@ -5545,7 +5545,7 @@ tcAddOpenTyFamInstCtxt mb_assoc decl
   where
     assoc = case mb_assoc of
       Nothing -> Nothing
-      Just (cls,_, _) -> Just $ classTyCon cls
+      Just (cls,_,_) -> Just $ classTyCon cls
     flav = TyConInstFlavour
          { tyConInstFlavour = OpenFamilyFlavour IAmType assoc
          , tyConInstIsDefault = False


=====================================
compiler/GHC/Tc/TyCl/Instance.hs
=====================================
@@ -515,7 +515,7 @@ tcClsInstDecl (L loc (ClsInstDecl { cid_ext = lwarn
              <- tcExtendNameTyVarEnv tv_skol_prs $
                 do  { let mini_env   = mkVarEnv (classTyVars clas `zip` substTys subst inst_tys)
                           mini_subst = mkTvSubst (mkInScopeSet (mkVarSet skol_tvs)) mini_env
-                          mb_info    = Just ( clas, visible_skol_tvs, mini_env)
+                          mb_info    = Just (clas, visible_skol_tvs, mini_env)
                     ; df_stuff  <- mapAndRecoverM (tcDataFamInstDecl mb_info tv_skol_env) adts
                     ; tf_insts1 <- mapAndRecoverM (tcTyFamInstDecl mb_info) ats
 



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/cc2f13c60433e8af3cdacee07898a7d0363f5367

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/cc2f13c60433e8af3cdacee07898a7d0363f5367
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20250216/03977217/attachment-0001.html>


More information about the ghc-commits mailing list