-- Modifying an Id
setIdName, setIdUnique, Id.setIdType, setIdExported, setIdNotExported,
setIdInfo, lazySetIdInfo, modifyIdInfo, maybeModifyIdInfo,
- zapLamIdInfo, zapDemandIdInfo,
+ zapLamIdInfo, zapDemandIdInfo, zapFragileIdInfo,
-- Predicates
isImplicitId, isDeadBinder, isDictId,
\end{code}
\begin{code}
+zapInfo :: (IdInfo -> Maybe IdInfo) -> Id -> Id
+zapInfo zapper id = maybeModifyIdInfo (zapper (idInfo id)) id
+
zapLamIdInfo :: Id -> Id
-zapLamIdInfo id = maybeModifyIdInfo (zapLamInfo (idInfo id)) id
+zapLamIdInfo = zapInfo zapLamInfo
+
+zapDemandIdInfo = zapInfo zapDemandInfo
-zapDemandIdInfo id = maybeModifyIdInfo (zapDemandInfo (idInfo id)) id
+zapFragileIdInfo :: Id -> Id
+zapFragileIdInfo = zapInfo zapFragileInfo
\end{code}
seqIdInfo, megaSeqIdInfo,
-- Zapping
- zapLamInfo, zapDemandInfo,
+ zapLamInfo, zapDemandInfo, zapFragileInfo,
-- Arity
ArityInfo,
| otherwise = Nothing
\end{code}
+\begin{code}
+zapFragileInfo :: IdInfo -> Maybe IdInfo
+zapFragileInfo info = Just (info `setSpecInfo` emptySpecInfo
+ `setUnfoldingInfo` NoUnfolding)
+\end{code}
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