[GHC] #8634: Relax functional dependency coherence check ("liberal coverage condition")

GHC ghc-devs at haskell.org
Mon Jul 21 18:26:03 UTC 2014


#8634: Relax functional dependency coherence check ("liberal coverage condition")
-------------------------------------+-------------------------------------
              Reporter:  danilo2     |             Owner:
                  Type:  feature     |            Status:  new
  request                            |         Milestone:  7.10.1
              Priority:  high        |           Version:  7.7
             Component:  Compiler    |          Keywords:
            Resolution:              |  Operating System:  Unknown/Multiple
Differential Revisions:  Phab:D69    |   Type of failure:  None/Unknown
          Architecture:              |         Test Case:
  Unknown/Multiple                   |          Blocking:
            Difficulty:  Unknown     |
            Blocked By:              |
       Related Tickets:  #1241,      |
  #2247, #8356, #9103, #9227         |
-------------------------------------+-------------------------------------

Comment (by sulzmann):

 Here's a brief summary of my current understanding:

 At all times we demand (the) Consistency (Condition). For instance, the
 following example violates the Consistency Condition.

 class C a b | a -> b
 instance C Int Bool
 instance C Int Char

 The Consistency Condition is the minimal requirement to guarantee type
 safety.

 (1) The Coverage Condition guarantees termination and confluence for all
 programs. Recall confluence means that we find unique answers.

 (2) The Weak Coverage Condition guarantees (local) confluence assuming
 that we can establish (local) termination. That is, if the type inferencer
 terminates for some constraint arising from some program text (aka goal
 constraint) then we know the answer is unique.

 (3) So what happens if we drop coverage (but of course still demand
 consistency)? Then we can neither guarantee termination nor confluence
 (which is obviously bad for predictable type inference). The example I
 gave still enjoys termination but in general we encounter non-confluence.
 danilo2 mentions some specific application scenario where for the specific
 constraints arising out of the program text we seem to find unique
 answers.

 I agree that the naming of GHC flags (UndecidableInstances,
 DysfunctionalDependencies) connected to (2) and (3) is not very helpful
 and rather confusing.

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


More information about the ghc-tickets mailing list