- let tyvars = varSetElems (tyVarsOfTypes (map idType new_ids))
- new_tyvars = map mk_skol tyvars
- new_tyvar_tys = map mkTyVarTy new_tyvars
- mk_skol tyvar = mkTcTyVar (tyVarName tyvar) (tyVarKind tyvar)
- (SkolemTv UnkSkol)
- subst = mkTvSubst emptyInScopeSet (mkVarEnv (zip tyvars new_tyvar_tys))
- subst_id id = id `setIdType` substTy subst (idType id)
- subst_ids = map subst_id new_ids
-
- Just (ATyCon unknown_tc) <- tcRnLookupName hsc_env unknownTyConName
- let result_name = mkSystemVarName (mkBuiltinUnique 33) FSLIT("_result")
- result_id = Id.mkLocalId result_name (mkTyConApp unknown_tc [])
+ -- make an Id for _result. We use the Unique of the FastString "_result";
+ -- we don't care about uniqueness here, because there will only be one
+ -- _result in scope at any time.
+ let result_fs = FSLIT("_result")
+ result_name = mkInternalName (getUnique result_fs)
+ (mkVarOccFS result_fs) (srcSpanStart span)
+ result_id = Id.mkLocalId result_name result_ty
+
+ let all_ids = result_id : ids
+ (id_tys, tyvarss) = mapAndUnzip (skolemiseTy.idType) all_ids
+ new_tyvars = unionVarSets tyvarss
+ new_ids = zipWith setIdType all_ids id_tys
+