Skip to content

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
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information