[GHC] #4361: Typechecker regression
GHC
cvs-ghc at haskell.org
Wed Jun 20 18:55:59 CEST 2012
#4361: Typechecker regression
---------------------------------------------+------------------------------
Reporter: igloo | Owner: simonpj
Type: bug | Status: closed
Priority: high | Milestone: 7.0.1
Component: Compiler (Type checker) | Version: 7.1
Resolution: fixed | Keywords:
Os: Unknown/Multiple | Architecture: Unknown/Multiple
Failure: None/Unknown | Difficulty: Unknown
Testcase: typecheck/should_compile/T4361 | Blockedby:
Blocking: | Related:
---------------------------------------------+------------------------------
Changes (by simonpj):
* cc: mechvel@… (added)
Comment:
With all the changes to type inference engine, it has become apparent that
the hack I put in to solve Serge's problem is indeed a GROSSLY UNSAVOURY
HACK.
* It is extremely fragile. It only solves the problem in a special case,
so the very same problem will arise again in a somewhat more complicated
program.
* It takes quite a bit of code.
* It has increasingly unpleasant knock-on effects. Eg `IPRun` has
started failing because a special case for implicit parameters has been
removed. But the special case itself was only needed because of the
GROSSLY UNSAVOURY HACK.
The hack is described in `Note [Avoid unecessary constraint
simplification]` above. I'm taking it out, which will make !DoCon fail to
compile. The culprit is local let generalisation (see
[http://hackage.haskell.org/trac/ghc/blog/LetGeneralisationInGhc7 my blog
post]). Happily, it's extremely easy to fix your source code in either of
these two ways:
* If you use `-XMonoLocalBinds` (which is in any case implied by
`-XGADTs` and `-XTypeFamilies`), then GHC won't generalise the definition
of `x` in the example, and all will be well.
* Alterantively, give a type signature for `x`, thus (in this case)
{{{
moduloBasisx p = let x :: ()
x = upLinSolvRing p
in ()
}}}
Doing so means that generalisation does not happen, and the constraints
are solved outside-in, as is really desired.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4361#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the Glasgow-haskell-bugs
mailing list