
#11948: GHC forgets constraints -------------------------------------+------------------------------------- Reporter: crockeea | Owner: Type: bug | Status: closed Priority: normal | Milestone: 8.0.2 Component: Compiler | Version: 7.10.3 Resolution: fixed | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: GHC rejects | Test Case: valid program | typecheck/should_fail/T11948 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by crockeea): Thanks for your work on this Simon. The warning is better than the current state of things. I do want to point out that while there are good reasons for simplifying constraints from instance declarations, it can also be a good thing **not** to. In particular, simplifying constraints to help GHC can result in code that has the LHS of the instance in many places, all of which have to be updated when the instance changes. Second, these simplified contexts might not make sense. For example: if I have an `instance (F a) => Foo (G a)` and a function `bar :: Foo (G a) => ...` where `bar` calls some function of `Foo` on type `G a`, GHC will now suggest (if I understand correctly) `bar :: (F a) => ...`. However, `bar` might not use any functions from `F` at all, and it may not involve the type `a` directly. Someone not intimately familiar with the code could be confused by this odd set of constraints. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11948#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler