-> (SimplEnv, OutBndr)
-- C.f. substIdBndr above
-- Clone Id if necessary, substitute its type
--- Return an Id with completely zapped IdInfo
+-- Return an Id with its fragile info zapped
+-- namely, any info that depends on free variables
-- [addLetIdInfo, below, will restore its IdInfo]
+-- We want to retain robust info, especially arity and demand info,
+-- so that they are available to occurrences that occur in an
+-- earlier binding of a letrec
-- Augment the subtitution
-- if the unique changed, *or*
-- if there's interesting occurrence info
where
id1 = uniqAway in_scope old_id
id2 = substIdType env id1
- new_id = setIdInfo id2 vanillaIdInfo
+
+ -- We want to get rid of any info that's dependent on free variables,
+ -- but keep other info (like the arity).
+ new_id = zapFragileIdInfo id2
-- Extend the substitution if the unique has changed,
-- or there's some useful occurrence information