From 00cc4d8773d1138f7b3b3ac122f3c98a6f93e68a Mon Sep 17 00:00:00 2001 From: "simonpj@microsoft.com" Date: Sat, 23 Sep 2006 04:04:16 +0000 Subject: [PATCH] Add TcRnMonad.newSysLocalIds, and use it --- compiler/typecheck/TcRnMonad.lhs | 15 +++++++++++---- compiler/typecheck/TcUnify.lhs | 3 +-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/compiler/typecheck/TcRnMonad.lhs b/compiler/typecheck/TcRnMonad.lhs index 9da9dc9..3b7a2e8 100644 --- a/compiler/typecheck/TcRnMonad.lhs +++ b/compiler/typecheck/TcRnMonad.lhs @@ -32,12 +32,13 @@ import Module ( Module, moduleName ) import RdrName ( GlobalRdrEnv, LocalRdrEnv, emptyLocalRdrEnv ) import Name ( Name, mkInternalName, tidyNameOcc, nameOccName, getSrcLoc ) import Type ( Type ) -import TcType ( tcIsTyVarTy, tcGetTyVar ) +import TcType ( TcType, tcIsTyVarTy, tcGetTyVar ) import NameEnv ( extendNameEnvList, nameEnvElts ) import InstEnv ( emptyInstEnv ) import FamInstEnv ( emptyFamInstEnv ) import Var ( setTyVarName ) +import Id ( mkSysLocal ) import VarSet ( emptyVarSet ) import VarEnv ( TidyEnv, emptyTidyEnv, extendVarEnv ) import ErrUtils ( Message, Messages, emptyMessages, errorsFound, @@ -49,12 +50,13 @@ import NameSet ( NameSet, emptyDUs, emptyNameSet, unionNameSets, addOneToNameSe import OccName ( emptyOccEnv, tidyOccName ) import Bag ( emptyBag ) import Outputable -import UniqSupply ( UniqSupply, mkSplitUniqSupply, uniqFromSupply, splitUniqSupply ) +import UniqSupply ( UniqSupply, mkSplitUniqSupply, uniqFromSupply, uniqsFromSupply, splitUniqSupply ) import UniqFM ( unitUFM ) import Unique ( Unique ) import DynFlags ( DynFlags(..), DynFlag(..), dopt, dopt_set, dopt_unset, GhcMode ) import StaticFlags ( opt_PprStyle_Debug ) +import FastString ( FastString ) import Bag ( snocBag, unionBags ) import Panic ( showException ) @@ -357,8 +359,13 @@ newUniqueSupply newLocalName :: Name -> TcRnIf gbl lcl Name newLocalName name -- Make a clone - = newUnique `thenM` \ uniq -> - returnM (mkInternalName uniq (nameOccName name) (getSrcLoc name)) + = do { uniq <- newUnique + ; return (mkInternalName uniq (nameOccName name) (getSrcLoc name)) } + +newSysLocalIds :: FastString -> [TcType] -> TcRnIf gbl lcl [TcId] +newSysLocalIds fs tys + = do { us <- newUniqueSupply + ; return (zipWith (mkSysLocal fs) (uniqsFromSupply us) tys) } \end{code} diff --git a/compiler/typecheck/TcUnify.lhs b/compiler/typecheck/TcUnify.lhs index ed6007b..2c9f9ec 100644 --- a/compiler/typecheck/TcUnify.lhs +++ b/compiler/typecheck/TcUnify.lhs @@ -745,8 +745,7 @@ wrapFunResCoercion arg_tys co_fn_res | isIdCoercion co_fn_res = return idCoercion | null arg_tys = return co_fn_res | otherwise - = do { us <- newUniqueSupply - ; let arg_ids = zipWith (mkSysLocal FSLIT("sub")) (uniqsFromSupply us) arg_tys + = do { arg_ids <- newSysLocalIds FSLIT("sub") arg_tys ; return (mkCoLams arg_ids <.> co_fn_res <.> mkCoApps arg_ids) } \end{code} -- 1.7.10.4