[GHC] #10524: PolyKinds doesn't interact well with DeriveFunctor

GHC ghc-devs at haskell.org
Mon Jun 22 15:46:48 UTC 2015


#10524: PolyKinds doesn't interact well with DeriveFunctor
-------------------------------------+-------------------------------------
        Reporter:  RyanGlScott       |                   Owner:
            Type:  bug               |                  Status:  new
        Priority:  normal            |               Milestone:
       Component:  Compiler          |                 Version:  7.10.1
      Resolution:                    |                Keywords:
Operating System:  Unknown/Multiple  |            Architecture:
 Type of failure:  GHC rejects       |  Unknown/Multiple
  valid program                      |               Test Case:
      Blocked By:                    |                Blocking:
 Related Tickets:                    |  Differential Revisions:
-------------------------------------+-------------------------------------

Comment (by rwbarton):

 Good question. In principle there are classes at other kinds `Functor1`,
 `Functor2` (not part of a systematic naming scheme) for which you can
 write

 {{{
 instance (Functor1 (f :: (* -> *) -> *), Functor2 (g :: * -> (* -> *))) =>
          Functor (Compose f g)
 }}}

 but GHC will probably never be able to derive that instance. (Maybe if
 eventually get a polykinded `Functor`, but then the deriving clause could
 produce a kind-polymorphic instance and there is no problem.) So, I don't
 see any real issue with having ordinary `deriving` producing an instance
 for `Functor (Compose * f g)`, to write the kind variable explicitly.

 However, it's certainly more clear-cut with the standalone deriving
 declaration, since then the kind variable is determined by the context
 which you wrote explicitly.

 I think GHC may have some general principles regarding ordinary deriving
 declarations and how they are less general than standalone deriving, but I
 never understood the exact details (aside from the fact that a standalone
 deriving declaration lets you specify the context). Maybe they don't have
 anything to say about this case with a kind variable anyways.

 Not sure where that leaves this ticket; the behavior of HEAD is a bug that
 I'll file separately. Maybe a feature request dependent on the resolution
 of that bug.

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


More information about the ghc-tickets mailing list