Tiny refactor to tcExtendRecEnv
authorSimon Peyton Jones <simonpj@microsoft.com>
Thu, 20 Dec 2018 12:41:14 +0000 (12:41 +0000)
committerSimon Peyton Jones <simonpj@microsoft.com>
Fri, 21 Dec 2018 13:00:14 +0000 (13:00 +0000)
In tcExtendRecEnv, there is no need to us setGlobalTypeEnv
(which side-effects the tcg_type_env_var).  tcExtendRecEnv
is used only when kind-checking a group of type/class decls
and no knot-tying via tcg_type_env_var is needed.

There is no change in functionality.

compiler/typecheck/TcEnv.hs

index d32272b..7337345 100644 (file)
@@ -378,8 +378,13 @@ tcExtendRecEnv :: [(Name,TyThing)] -> TcM r -> TcM r
 -- Just like tcExtendGlobalEnv, except the argument is a list of pairs
 tcExtendRecEnv gbl_stuff thing_inside
  = do  { tcg_env <- getGblEnv
-       ; let ge' = extendNameEnvList (tcg_type_env tcg_env) gbl_stuff
-       ; tcg_env' <- setGlobalTypeEnv tcg_env ge'
+       ; let ge'      = extendNameEnvList (tcg_type_env tcg_env) gbl_stuff
+             tcg_env' = tcg_env { tcg_type_env = ge' }
+         -- No need for setGlobalTypeEnv (which side-effects the
+         -- tcg_type_env_var); tcExtendRecEnv is used just
+         -- when kind-check a group of type/class decls. It would
+         -- in any case be wrong for an interface-file decl to end up
+         -- with a TcTyCon in it!
        ; setGblEnv tcg_env' thing_inside }
 
 {-