Desugar multiple polymorphic bindings more intelligently
authorsimonpj@microsoft.com <unknown>
Thu, 5 Jun 2008 12:44:23 +0000 (12:44 +0000)
committersimonpj@microsoft.com <unknown>
Thu, 5 Jun 2008 12:44:23 +0000 (12:44 +0000)
commita3f24157839605f19e869fdde8cd73266fecf4ac
tree3a5794e3b447df97b446e1361843cf3f5185b078
parent1b1190e01d0c65043628d2532988d9b1b4a78384
Desugar multiple polymorphic bindings more intelligently

Occasionally people write very large recursive groups of definitions.
In general we desugar these to a single definition that binds tuple,
plus lots of tuple selectors.  But that code has quadratic size, which
can be bad.

This patch adds a new case to the desugaring of bindings, for the
situation where there are lots of polymorphic variables, but no
dictionaries.  (Dictionaries force us into the general case.)

See Note [Abstracting over tyvars only].

The extra behaviour can be disabled with the (static) flag

-fno-ds-multi-tyvar

in case we want to experiment with switching it on or off.  There is
essentially-zero effect on the nofib suite though.

I was provoked into doing this by Trac #1136.  In fact I'm not sure
it's the real cause of the problem there, but it's a good idea anyway.
compiler/deSugar/DsBinds.lhs
compiler/main/StaticFlags.hs