Special-case record fields ending with hash when deriving Read

Authored by RyanGlScott on Mar 23 2018, 10:40 AM.

Description

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 Trac #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 Trac #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: Trac #14918

Differential Revision: https://phabricator.haskell.org/D4502

(cherry picked from commit d5577f44eaf3b9dfdfc77828038782bf818c176a)