Improve the desugaring of RULE left-hand-sides (fixes Trac #8848)
authorSimon Peyton Jones <simonpj@microsoft.com>
Tue, 25 Mar 2014 14:12:59 +0000 (14:12 +0000)
committerSimon Peyton Jones <simonpj@microsoft.com>
Tue, 25 Mar 2014 14:12:59 +0000 (14:12 +0000)
commit41ba7ccb742278de0abf32cb7571c71b150997a3
treedf1a6a1669ec97656d44977bb828f2c907e11279
parent0b6fa3e95078797f87302780a85607decab806fb
Improve the desugaring of RULE left-hand-sides (fixes Trac #8848)

I've added detailed comments with
  Note [Decomposing the left-hand side of a RULE]

The result is a noticeable improvement.  Previously

 * we rejected a perfectly decent SPECIALISE (Trac #8848)

 * and for something like
      f :: (Eq a) => b -> a -> a
      {-# SPECIALISE f :: b -> [Int] -> [Int] #-}
   we ended up with
      RULE  f ($fdEqList $dfEqInt) = f_spec
   whereas we wanted
      RULES forall (d:Eq [Int]). f d = f_spec
compiler/deSugar/DsBinds.lhs
testsuite/tests/simplCore/should_compile/simpl016.stderr