
#8044: "Inaccessible code" error reported in wrong place --------------------------------------------+------------------------------ Reporter: goldfire | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler (Type checker) | Version: 7.7 Resolution: | Keywords: GADTs Operating System: Unknown/Multiple | Architecture: Type of failure: None/Unknown | Unknown/Multiple Test Case: | Difficulty: Unknown Blocking: | Blocked By: | Related Tickets: --------------------------------------------+------------------------------ Changes (by simonpj): * cc: dimitris@… (added) Comment: Interesting. From the constraints we get: {{{ ((a ~ Int) => X (Frob a) ~ X Int) -- (A) From first eqn for Frob & X (Frob a) ~ X Char -- (B) From second eqn }}} Now the first constraint (A) all by itself is soluble: substitute `Int` for `a`, simplify `(Frob Int)` and you are done. But in general we use type-function equality constraints (including as- yet-unsolved constraints) from outside an implication and push them inwards as "givens" (see `Note [Preparing inert set for implications]` in `TcSMonad`). So we push in a given {{{ Frob a ~ Char }}} into (A) and that leads to `Int~Char` and the error. I think we should narrow the "push in wanteds" stuff. I'll have a go at that. Simon -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8044#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler