Give (some) known-key Ids like `noinline` a special demand transformer
In #16588 (closed), we realised that
noinline should be treated specially in demand analysis. There was an attempt in !1761 (closed), but that was deemed too expensive (? I think) and in my opinion could be solved much more elegantly by starting to give known-key Ids like
noinline special, more precise demand transformers. Here's a list, feel free to add more:
noinline: Has the same demand transformer as its argument. Example:
uncurry (+) (noinline (x,y))
runRW#: Has a demand signature, but that is only a single point approximation of its demand transformer. See
Note [What are demand signatures?]
- same for
lazy: Should have the Top demand transformer, for which it is sufficient that it has the default Top demand signature. Thus no special case needed.
Apparently (#16588 (closed)), treatment of
noinline is useful, so it should be tackled first.