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

GHC ghc-devs at haskell.org
Mon Jul 21 13:02:23 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):

 Correct. I'm too pessimistic in my comment.
 For type safety (well-typed programs cannot go wrong) it suffices to have
 consistency.
 Simon, surely the Consistency Condition must hold at least, right?
 I agree then that the Coverage Condition (or variants) can be dropped.
 See Theorem 1 in the above mentioned paper.

 I still find it strange that you want to drop the Coverage Condition (or
 variants of it).
 This clearly leads to non-confluence, hence, unpredictable type inference.

 Consider

 class F a b | a -> b where
    f :: a -> b -> a

 instance F b a => F [a] [b]
 -- Order of 'a' and 'b' swapped!
 -- Hence, (weak) coverage is violated.


 g as bs c = (f as bs, f as c)

 The above gives (roughly) rise to the constraints

  F [a] [b], F[a] c

 Depending on the order type inference rules are applied, the following two
 final constraints may arise

 (1) c = [b], F b a

 (2) c = [b'], F b a, F b' a

 Say we use (1) for some type annotation but the type checker only comes up
 with (2). Urgh!

 To conclude:

 - For type safety we require at least consistency
 - For predictable type inference we require (local) termination and (weak)
 coverage.

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


More information about the ghc-tickets mailing list