Special-case record fields ending with hash when deriving Read
authorRyan Scott <ryan.gl.scott@gmail.com>
Fri, 23 Mar 2018 15:40:02 +0000 (11:40 -0400)
committerRyan Scott <ryan.gl.scott@gmail.com>
Fri, 23 Mar 2018 15:40:02 +0000 (11:40 -0400)
commitd5577f44eaf3b9dfdfc77828038782bf818c176a
tree447d2163367ece2e2801376e35d06490cfff779c
parent034c32f6b8abd15eb9affca972844d3c6842af69
Special-case record fields ending with hash when deriving Read

Summary:
In commit dbd81f7e86514498218572b9d978373b1699cc5b, a
regression was inadvertently introduced which caused derived `Read`
instances for record data types with fields ending in a `#` symbol
(using `MagicHash`) would no longer parse on valid output. This
is ultimately due to the same reasons as #5041, as we cannot parse
a field name like `foo#` as a single identifier. We fix this issue
by employing the same workaround as in #5041: first parse the
identifier name `foo`, then then symbol `#`.

This is accomplished by the new `readFieldHash` function in
`GHC.Read`. This will likely warrant a `base-4.11.1.0` release.

Test Plan: make test TEST=T14918

Reviewers: tdammers, hvr, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14918

Differential Revision: https://phabricator.haskell.org/D4502
compiler/prelude/PrelNames.hs
compiler/typecheck/TcGenDeriv.hs
docs/users_guide/8.4.2-notes.rst [new file with mode: 0644]
docs/users_guide/index.rst
libraries/base/GHC/Read.hs
libraries/base/changelog.md
testsuite/tests/deriving/should_run/T14918.hs [new file with mode: 0644]
testsuite/tests/deriving/should_run/T14918.stdout [new file with mode: 0644]
testsuite/tests/deriving/should_run/all.T