[GHC] #8338: Incoherent instances without -XIncoherentInstances

GHC ghc-devs
Thu Oct 10 21:43:47 UTC 2013


#8338: Incoherent instances without -XIncoherentInstances
-------------------------------------+------------------------------------
        Reporter:  goldfire          |            Owner:
            Type:  bug               |           Status:  new
        Priority:  normal            |        Milestone:
       Component:  Compiler          |          Version:  7.6.3
      Resolution:                    |         Keywords:
Operating System:  Unknown/Multiple  |     Architecture:  Unknown/Multiple
 Type of failure:  None/Unknown      |       Difficulty:  Unknown
       Test Case:                    |       Blocked By:
        Blocking:                    |  Related Tickets:
-------------------------------------+------------------------------------

Comment (by illissius):

 I might be missing something important, but it seems to me that the answer
 is very obviously 4. I'm not familiar with the precise language of the
 standard, but I always understood the rule to be very simple: "thou shalt
 have no more than one instance of a class for a type in thy program".
 We're blatantly violating this rule, the question is why GHC is not
 catching us. I think the answer is that you've come up with a way to
 distinguish GHC's lazy checking of instance overlap from other compilers'
 eager checking, to GHC's detriment. There's no use of a `Show One`
 instance in `D`, so GHC doesn't bother to investigate it. If overlap were
 checked eagerly at imports instead of lazily at use sites, the error would
 be caught.

 Obviously there must be a reason why GHC does lazy rather than eager
 checking (and I think it might have something to do with `Overlapping`-
 and `IncoherentInstances`?), but I don't know the specifics. What would
 break if overlap checking were eager?

 > We could prohibit importing two modules that export conflicting
 instances. But, that would cause interoperability problems between
 different modules/packages that define overlapping instances.

 Do you mean overlapping instances using `OverlappingInstances`, or without
 it? In the latter case I think it's the absence of interoperability
 problems that should count as a bug.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8338#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler



More information about the ghc-tickets mailing list