
#12466: Typechecker regression: Inaccessible code in a type expected by the context -------------------------------------+------------------------------------- Reporter: RyanGlScott | Owner: Type: bug | Status: new Priority: highest | Milestone: 8.0.2 Component: Compiler (Type | Version: 8.1 checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: GHC rejects | Unknown/Multiple valid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): Currently {{{ foo :: (Char ~ Int => Int) -> a -> a foo _ a2 = a2 }}} gives a similar message. Is that reasonable? The argument to `foo` can't be called. Instance decls are a bit different because you can change the type signature. Eg here is a simpler example {{{ class C a where foo :: (a~Int) => a -> a instance C Bool where foo = undefined }}} The instance decl is rejected, by both GHC 7.10 and HEAD. But of course there's nothing you can do about it. `foo` can't be called, but it needs something for the method `foo`. (It works when you leave out the definition of `foo` altogether, but I think only by accident.) What we need is NOT to complain about inconsistent 'givens' when typechecking instance methods. And certainly not to fail. Would that serve? It would sadly mean that inaccessible code somewhere deep in the body of an instance method wouldn't be reported, but maybe that's a lesser evil. I have not followed all this stuff about `Conjoined`. Is it all the same question? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12466#comment:22 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler