Consolidate treatment of strictness in parser
Currently GHC's treatment of binding strictness in the Haskell parser and AST is the result of a long, winding evolution. Since D3670 we have tracked strictness of variable bindings (e.g.
!x = ...) in the
Note [Varieties of bindings]). This is parsed by ``. However, explicitly lazy bindings (e.g.
\~x = ...) are parsed via a completely different means (see the rule starting with `~` in `aexp`) and represented as `ELazyPat` until being mangled into a pattern in `RdrHsSyn`. It seems to me like these two paths should be more symmetric.