[GHC] #11534: Allow class associated types to reference functional dependencies

GHC ghc-devs at haskell.org
Wed Mar 2 08:55:55 UTC 2016


#11534: Allow class associated types to reference functional dependencies
-------------------------------------+-------------------------------------
        Reporter:  ekmett            |                Owner:
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler (Type    |              Version:  7.10.3
  checker)                           |             Keywords:  TypeFamilies,
      Resolution:                    |  FunctionalDependencies
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  Other             |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by adamgundry):

 Going back to imagining something more ambitious to tackle the original
 issue, how feasible would it be to take a class
 {{{#!hs
 class Foo i j | i -> j

 instance Foo Int Bool
 }}}
 and elaborate it into something like
 {{{#!hs
 class j ~ Foo_FD1 i => Foo i j where
   type Foo_FD1 i :: *

 instance Foo Int Bool where
   type Foo_FD1 Int = Bool
 }}}
 so that functional dependencies really would build a type family behind
 the scenes, and the class would carry explicit evidence? This would make
 it possible for given constraints involving fundeps to work properly,
 which they don't at present (as [https://mail.haskell.org/pipermail/ghc-
 devs/2016-March/011502.html Iavor points out]).

 Of course, we'd need to figure out how the user should be allowed to refer
 to such type families, and how the constraint solver should treat them.
 Moreover, this translation might break programs that are abusing fundeps
 (comment:16). But perhaps it would be worth exploring.

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


More information about the ghc-tickets mailing list