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

GHC ghc-devs at haskell.org
Tue Jul 22 11:08:46 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 simonpj):

 Several points

  * Your script in comment:37 typechecks just fine if you use
 `-XScopedTypeVariables`.  You need the 's' in the body of `tst` to be the
 same as the one in the type signature.

  * Interestingly in this example, unlike earlier ones, the instances for
 `Property` really do morally satisfy the (liberal) Coverage condition: the
 first parameter determines the second. And GHC knows this.  For example,
 this is accepted right now (with `UndecidableInstances` so that we get the
 liberal coverage condition):
 {{{
 class Property a b | a -> b  where   -- Note the fundep
    property :: a -> b

 instance (y ~ Y) => Property X y where   -- Suppose this was accepted
     property _ = Y
 }}}
  And now you don't need the `:: s` signature in the body of `tst`

  * It's also worth remembering that ALL fundeps do in GHC is guide the
 type inference engine.  And you can offer the same guidance via type
 signatures.  So you should be alle to fix your 600-module system by adding
 some type signatures.

  * Martin's excellent example, explained in detail in comment:30, is a
 pretty convincing reason for not rushing ahead with lifting the coverage
 condition altogether, especially given that there is another workaround
 (type signatures).

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


More information about the ghc-tickets mailing list