Disable -XRebindableSyntax when running internal GHCi expressions
authorRyan Scott <ryan.gl.scott@gmail.com>
Thu, 19 Oct 2017 13:50:17 +0000 (09:50 -0400)
committerRyan Scott <ryan.gl.scott@gmail.com>
Thu, 19 Oct 2017 13:50:17 +0000 (09:50 -0400)
commite023e78bc13ffae168f00a52324fc406a146b40f
tree26de40d8f1a655357b1a06ee1eeb9ecbdcbcbc4a
parent20ae22b08c79dc1cf851c79a73601c7c62abca16
Disable -XRebindableSyntax when running internal GHCi expressions

Summary:
It's well known that `-XRebindableSyntax` doesn't play
nicely with some of the internal expressions that GHCi runs. #13385
was one example where this problem arose, which was fixed at the time
by simply avoiding the use of `do`-notation in these internal GHCi
expressions. That seemed to work, but it was a technique that proved
not to scale, as #14342 demonstrated //another// example where
`-XRebindableSyntax` can bite.

Instead of delicately arranging the internal GHCi expressions to
avoid anything that might be covered under `-XRebindableSyntax`,
this patch takes the much more direct approach of disabling
`-XRebindableSyntax` entirely when running any internal GHCi
expression. This shouldn't hurt, since nothing internal to GHCi was
taking advantage of the extension in the first place, and moreover,
we can have greater confidence that some other obscure
`-XRebindableSyntax` corner case won't pop up in the future. As an
added bonus, this lets us once again use `do`-notation in the code
that had to be changed when #13385 was (hackily) fixed before.

Test Plan: make test TEST=T14342

Reviewers: bgamari, austin

Subscribers: rwbarton, thomie

GHC Trac Issues: #14342

Differential Revision: https://phabricator.haskell.org/D4086
ghc/GHCi/UI/Monad.hs
testsuite/tests/ghci/scripts/T14342.script [new file with mode: 0644]
testsuite/tests/ghci/scripts/all.T