Show: Activate literal rewrite rules in simplifier phase 1
authorBen Gamari <ben@smart-cactus.org>
Thu, 30 Jul 2015 10:12:06 +0000 (12:12 +0200)
committerBen Gamari <ben@smart-cactus.org>
Thu, 30 Jul 2015 11:18:08 +0000 (13:18 +0200)
commit9b01539fa849cee05971409a9317fb88d126570d
tree07a8ae708af41f0472e6bb46bff94f0b54373063
parent53c968dbe60d52f47b3b45452570a527f01e6ee5
Show: Activate literal rewrite rules in simplifier phase 1

When rewriting in a rule, GHC pretends that it is in the phase given by
the activation phase of the rule (see Note [Simplifying inside stable
unfoldings] in `SimplUtils` for rationale). This means that while
rewriting the text literal rules, the simplifier is effectively in phase
2 due to 86ddf8a9dd29d9548bec2e253f1793dc5f346a05.

As it turns out, the `build` rule provided by `base` is also active in
phase 2, meaning it still competes with the literal rules (as 7.10.2
uses it to rewrite the LHS). For this reason, the previous change did
not resolve the performance issue in 7.10.2; something I did not
previously catch due to a rather silly issue in my test envirionment.

This issue is now properly resolved by activating the literal rewrite
rules only in phase 1, by which point the `build` rule is inactive. See
comments 22 through 25 in GHC Trac #10528 for details.
Data/Text/Show.hs