[GHC] #5462: Deriving clause for arbitrary classes

GHC ghc-devs at haskell.org
Mon Feb 10 11:40:51 UTC 2014


#5462: Deriving clause for arbitrary classes
-------------------------------------+------------------------------------
        Reporter:  simonpj           |            Owner:  dreixel
            Type:  feature request   |           Status:  new
        Priority:  normal            |        Milestone:  ⊥
       Component:  Compiler          |          Version:  7.2.1
      Resolution:                    |         Keywords:  Generics
Operating System:  Unknown/Multiple  |     Architecture:  Unknown/Multiple
 Type of failure:  None/Unknown      |       Difficulty:  Unknown
       Test Case:                    |       Blocked By:
        Blocking:                    |  Related Tickets:  #7346
-------------------------------------+------------------------------------

Comment (by dreixel):

 Replying to [comment:22 lerkok]:
 > Is there any progress on this ticket? Looks like milestone was changed
 to 7.6.2. I've got 7.6.3 installed, which does not seem to support such
 deriving instances. Do I need a particular flag to enable this?

 No, this was not implemented yet. But I like the idea, and I think Simon's
 specification is good (repeating here):

 ----

 A class can appear in a deriving clause if (and only if) the class has at
 least one default foo :: type signature, and the class has a default
 method definition for every method. Thus:
 {{{
 class C1 a where  -- NO (no default method)
   op1 :: a -> a

 class C2 a where  -- NO (non default method signature)
   op2 :: a -> a
   op2 x = x

 class C3 a where  -- YES (both are present)
   op3 :: a -> a
   default op3 :: Ord a => a -> a
   op3 x = x>x
 }}}

 ----

 Only thing left to answer is how to determine the context (in case of
 standard deriving; in standalone deriving, the user provides the context).
 For that, I think that Andres's proposal in #7346 sounds reasonable:

 ----

 I propose that if normal deriving is used, GHC uses the same heuristic for
 figuring out the class context that it uses for Eq in the case of
 `*`-kinded classes, and for Functor in the case of `* -> *`-kinded
 classes. That may not be optimal or even wrong. But in such cases,
 standalone deriving can still be used.

 ----

 If there is no opposition, I'm happy to have a go at implementing this. I
 agree with [comment:11 dterei] that Haddock and GHCi support would be
 desirable too.

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


More information about the ghc-tickets mailing list