ExnStr doesn't propagate "outwards"
hello :: STM Char -> STM Char hello a = a `orElse` pure 'a'
orElse is defined in terms of) has the following demand signature,
x here: this means it is
ExnStr, since it doesn't bottom even if the first argument does (despite the fact that it's strict).
So, the question is this: What demand should
hello place on its first argument? I would have thought that it should be precisely the same as the demand that
catchRetry# places on **its** first argument. However, the demand analyser seems to conclude this:
Note the lack of an
x. I believe this may be what causes #13916 (closed).