Fix an obscure but terrible bug in the simplifier (Trac #9567)
authorSimon Peyton Jones <simonpj@microsoft.com>
Thu, 11 Dec 2014 17:12:49 +0000 (17:12 +0000)
committerSimon Peyton Jones <simonpj@microsoft.com>
Thu, 11 Dec 2014 17:12:49 +0000 (17:12 +0000)
commitb8392ae76a6d39c57be94b5ba041c450ab479e2b
treefa1f8f37cd8b3fa79fc46a4c416f850f3254c98f
parent8c825633135e24f6a0bbcc2c4097afada6ad6167
Fix an obscure but terrible bug in the simplifier (Trac #9567)

The issue was that contInputType simply gave the wrong answer
for type applications.

There was no way to fix contInputType; it just didn't have enough
information.  So I did this:

* Split the ApplyTo constructor of SimplUtils.SimplCont into
      ApplyToVal
      ApplyToTy
  I used record syntax for them; we should do this for some
  of the other constructors too.

* The latter carries a sc_hole_ty, which is the type of the
  continuation's "hole"

* Maintaining this type meant that I had do to something
  similar for SimplUtils.ArgSpec.

* I renamed contInputType to contHoleType for consistency.

* I did a bit of refactoring around the call to tryRules
  in Simplify, which was jolly confusing before.

The resulting code is quite nice now.  And it has the additional
merit that it works.

The tests are simply tc124 and T7891 with -O enabled.
compiler/simplCore/SimplUtils.hs
compiler/simplCore/Simplify.hs
testsuite/tests/typecheck/should_compile/T7891.hs
testsuite/tests/typecheck/should_compile/tc124.hs