Don't expose (~#), (~R#), (~P#) from GHC.Prim
authorRyan Scott <ryan.gl.scott@gmail.com>
Thu, 7 Jun 2018 17:30:28 +0000 (13:30 -0400)
committerBen Gamari <ben@smart-cactus.org>
Thu, 7 Jun 2018 22:06:30 +0000 (18:06 -0400)
commit5926b6ed0dcc86f8fd6038fdcc5e2ba2856f40ce
tree9e35b564dfb8039fe7b8139a84c0a2283f00fc7f
parent04e29fc63e1f1d975c73449b27471cf59c9ffca2
Don't expose (~#), (~R#), (~P#) from GHC.Prim

Currently, the primitive `(~#)`, `(~R#)`, and `(~P#)` type
constructors are wired in to be exported from `GHC.Prim`. This has
some unfortunate consequences, however. It turns out that `(~#)` is
actually a legal infix identifier, so users can make use of unboxed
equalities in strange ways in user code (see #15209). The other two,
`(~R#)` and `(~P#)`, can't be used in source code, but they can be
observed with GHCi's `:browse` command, which is somewhat unnerving.

The fix for both of these problems is simple: just don't wire them
to be exported from `GHC.Prim`.

Test Plan: make test TEST="T12023 T15209"

Reviewers: bgamari, dfeuer

Reviewed By: bgamari, dfeuer

Subscribers: rwbarton, thomie, carter, dfeuer

GHC Trac Issues: #12023, #15209

Differential Revision: https://phabricator.haskell.org/D4801
compiler/prelude/PrelInfo.hs
compiler/prelude/TysPrim.hs
testsuite/tests/ghci/scripts/Makefile
testsuite/tests/ghci/scripts/T12023.script [new file with mode: 0644]
testsuite/tests/ghci/scripts/T12023.stdout [new file with mode: 0644]
testsuite/tests/ghci/scripts/all.T
testsuite/tests/parser/should_fail/T15209.hs [new file with mode: 0644]
testsuite/tests/parser/should_fail/T15209.stderr [new file with mode: 0644]
testsuite/tests/parser/should_fail/all.T