• simonpj@microsoft.com's avatar
    Desugar multiple polymorphic bindings more intelligently · a3f24157
    simonpj@microsoft.com authored
    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
    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.
StaticFlags.hs 21 KB