[GHC] #1549: ghc derives different type signature for equal
functions with overlapping instances
GHC
trac at galois.com
Tue Jul 31 09:53:59 EDT 2007
#1549: ghc derives different type signature for equal functions with overlapping
instances
----------------------------------------+-----------------------------------
Reporter: int-e | Owner:
Type: bug | Status: closed
Priority: normal | Milestone:
Component: Compiler (Type checker) | Version: 6.7
Severity: normal | Resolution: invalid
Keywords: | Difficulty: Unknown
Os: Linux | Testcase:
Architecture: x86 |
----------------------------------------+-----------------------------------
Changes (by simonpj):
* resolution: => invalid
* status: new => closed
Comment:
The rules for instance overlap are described here:
http://www.haskell.org/ghc/docs/latest/html/users_guide/type-
extensions.html#instance-overlap
When compiling B.hs, GHC sees that there is an overlapping instance and so
refrains from simplifying the constraint `Monad (A.MaybeT m)`, becuase `m`
might be instantiated to `Foo`. But when compiling C.hs, it sees no such
overlap, so it simplifies the constraint. It doesn't see the overlap
because B is not in the transitive imports of C.
That's why you get different types. To get the same types, we'd have to
refrain from '''ever''' using an instance declaration in case it was later
overlapped, and that seems impractical becuase it would percolate all
constraints up to `main`.
In short, this seems to be the documented behaviour. But the
documentation may not be adequately clear. If you can suggest concrete
improvements (E.g. Add ".." after "...") then that would be v helpful.
Thanks.
Simon
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/1549>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the Glasgow-haskell-bugs
mailing list