+vectTypeEnv :: TypeEnv -> VM TypeEnv
+vectTypeEnv env
+ = do
+ cs <- readGEnv $ mk_map . global_tycons
+ let (conv_tcs, keep_tcs) = classifyTyCons cs groups
+ keep_dcs = concatMap tyConDataCons keep_tcs
+ zipWithM_ defTyCon keep_tcs keep_tcs
+ zipWithM_ defDataCon keep_dcs keep_dcs
+ new_tcs <- vectTyConDecls conv_tcs
+ return $ extendTypeEnvList env
+ (map ATyCon new_tcs ++ [ADataCon dc | tc <- new_tcs
+ , dc <- tyConDataCons tc])
+ where
+ tycons = typeEnvTyCons env
+ groups = tyConGroups tycons
+
+ mk_map env = listToUFM_Directly [(u, getUnique n /= u) | (u,n) <- nameEnvUniqueElts env]
+
+ keep_tc tc = let dcs = tyConDataCons tc
+ in
+ defTyCon tc tc >> zipWithM_ defDataCon dcs dcs
+
+