[GHC] #14661: Cannot derive (newtype I a b = I (F a -> F b) deriving newtype Category) for type family F

GHC ghc-devs at haskell.org
Tue Jan 30 18:27:10 UTC 2018


#14661: Cannot derive (newtype I a b = I (F a -> F b) deriving newtype Category)
for type family F
-------------------------------------+-------------------------------------
        Reporter:  Iceland_jack      |                Owner:  (none)
            Type:  feature request   |               Status:  closed
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.4.1-alpha1
      Resolution:  wontfix           |             Keywords:
                                     |  DerivingStrategies, deriving,
                                     |  TypeFamilies
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by RyanGlScott):

 Your example in comment:12 is quite interesting. It only fails because GHC
 attempts to generate the constraint `Semigroup (forall xx. Endo xx)` and
 immediately chokes. But we never intended to generate that constraint—we
 wanted `forall xx. Semigroup (Endo xx)`, a quantified constraint!

 I would posit that if we derive instances that require slapping a class
 onto a type, we should be pushing the class through `forall`s and other
 constraints. For instance, if we want to apply `Semigroup` to `forall xx.
 Endo xx`, we should push `Semigroup` through `forall xx` to obtain `forall
 xx. Show (Endo xx)`, and then chuck //that// into the constraint solver.

 (I think this same strategy would work with the program in comment:13, as
 we really want to generate the constraint `forall zz. ListLike zz =>
 ListLike zz`, which could be discharged immediately. But that might
 require #14733 to be fixed, so perhaps it's not as good of a motivating
 example.)

 All of this assumes `QuantifiedConstraints`, of course, so it's not really
 actionable right now. Iceland_jack, perhaps you could open a separate
 ticket for this? (With the keyword `deriving` in there so that I can find
 it later.)

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


More information about the ghc-tickets mailing list