XRecursiveDo desugaring is too strict when using XStrict
Summary
RecursiveDo is unusable when Strict is also enabled. Even simple statements such as rec ~_ <- pure ()
loop.
See also: !882 (diffs)
Steps to reproduce
Two testcases:
Both of these loop
foo :: Identity Int
foo = do
rec ~_ <- pure ()
pure 1
foo :: Identity Int
foo = do
rec ~i <- pure i
pure 1
Environment
- GHC version used: 8.7.20190115 and 8.6.4