1. 14 Jun, 2008 3 commits
  2. 13 Jun, 2008 1 commit
  3. 12 Jun, 2008 3 commits
  4. 11 Jun, 2008 3 commits
  5. 10 Jun, 2008 4 commits
  6. 06 Jun, 2008 16 commits
  7. 05 Jun, 2008 5 commits
    • simonpj@microsoft.com's avatar
      Vital follow-up to fix of Trac #2045 · 04d0ebc9
      simonpj@microsoft.com authored
      Sorry -- my 'validate' didn't work right and I missed a trick.
      This patch must accompany
      
       * Fix Trac #2045: use big-tuple machiney for implication constraints
      
      04d0ebc9
    • simonpj@microsoft.com's avatar
    • simonpj@microsoft.com's avatar
      Comments only · 9aa2708b
      simonpj@microsoft.com authored
      9aa2708b
    • 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
      
      	-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.
      a3f24157
    • simonpj@microsoft.com's avatar
      Add non-recursive let-bindings for types · 1b1190e0
      simonpj@microsoft.com authored
      This patch adds to Core the ability to say
      	let a = Int in <body>
      where 'a' is a type variable.  That is: a type-let.
      See Note [Type let] in CoreSyn.
      
      * The binding is always non-recursive
      * The simplifier immediately eliminates it by substitution 
      
      So in effect a type-let is just a delayed substitution.  This is convenient
      in a couple of places in the desugarer, one existing (see the call to
      CoreTyn.mkTyBind in DsUtils), and one that's in the next upcoming patch.
      
      The first use in the desugarer was previously encoded as
      	(/\a. <body>) Int
      rather that eagerly substituting, but that was horrid because Core Lint
      had do "know" that a=Int inside <body> else it would bleat.  Expressing
      it directly as a 'let' seems much nicer.
      
      1b1190e0
  8. 04 Jun, 2008 5 commits