Apologies, I should have used SHA references in the links:

> The code which seems to cause this is here:
https://github.com/brendanhay/amazonka/blob/release/0.1.4/core/src/Network/AWS/Data/Internal/Text.hs#L51

https://github.com/brendanhay/amazonka/blob/049fab83dd71e3f2e8aa5643902f95e83604db0c/core/src/Network/AWS/Data/Internal/Text.hs#L52

> With the downstream project having about 68 call sites for the above function starting here:
https://github.com/brendanhay/amazonka/blob/release/0.1.4/amazonka-ec2/gen/Network/AWS/EC2/Types.hs#L1465

https://github.com/brendanhay/amazonka/blob/04f620d3e01a05c30db99afa07a84d07eee12434/amazonka-ec2/gen/Network/AWS/EC2/Types.hs#L1465


On 6 January 2015 at 20:07, Brendan Hay <brendan.g.hay@gmail.com> wrote:
Hi,

I've recently run into an issue whereby changing textual case comparison
to use the Data.CaseInsensitive.mk smart constructor causes substantial
differences to outputted core language and a related compilation speed regression.

The code which seems to cause this is here:

With the downstream project having about 68 call sites for the above function starting here:

For comparison, the previous version used Attoparsec.Text.takeText and Text values.

Here are some hand wavy points of interest:

* Before (Case Sensitive)
Function: takeText = Attoparsec.Text.takeText
Time (real): 2m27.735s
amazonka-ec2/gen/Network/AWS/EC2/Types.hs (simpl): {terms: 242,688, types: 310,463, coercions: 31,215}

* After (Case Insensitive)
Function: takeCI = Data.CaseInsensitive.mk <$> Attoparsec.Text.takeText
Time (real): 11m31.937s
amazonka-ec2/gen/Network/AWS/EC2/Types.hs (simpl): {terms: 1,384,779, types: 465,656, coercions: 33,510}

I'm finding the outputted core rather unwieldy to analyse, but the main
difference seems to be the inclusion of huge swathes of case statements like:

It would be appreciated if someone could help me to understand in simple terms why
the use of case-insensitive causes this.