-newLocalDs :: FAST_STRING -> Type -> DsM Id
-newLocalDs nm ty us loc mod_and_grp env warns
- = case (getUnique us) of { assigned_uniq ->
- (mkSysLocal nm assigned_uniq ty loc, warns) }
-
-newSysLocalDs = newLocalDs SLIT("ds")
-newSysLocalsDs tys = mapDs (newLocalDs SLIT("ds")) tys
-newFailLocalDs = newLocalDs SLIT("fail")
+uniqSMtoDsM :: UniqSM a -> DsM a
+uniqSMtoDsM u_action = DsM(\ env warns ->
+ u_action `thenUs` \ res ->
+ returnUs (res, warns))
+
+
+getUniqueDs :: DsM Unique
+getUniqueDs = DsM (\ env warns ->
+ getUniqueUs `thenUs` \ uniq ->
+ returnUs (uniq, warns))
+
+getUniquesDs :: DsM [Unique]
+getUniquesDs = DsM(\ env warns ->
+ getUniquesUs `thenUs` \ uniqs ->
+ returnUs (uniqs, warns))
+
+getUniqSupplyDs :: DsM UniqSupply
+getUniqSupplyDs = DsM(\ env warns ->
+ getUs `thenUs` \ uniqs ->
+ returnUs (uniqs, warns))
+
+-- Make a new Id with the same print name, but different type, and new unique
+newUniqueId :: Name -> Type -> DsM Id
+newUniqueId id ty
+ = getUniqueDs `thenDs` \ uniq ->
+ returnDs (mkSysLocal (occNameFS (nameOccName id)) uniq ty)