[GHC] #15376: GHC determine illegal kind for standalone deriving with Deriving via

GHC ghc-devs at haskell.org
Sat Jul 14 14:53:52 UTC 2018


#15376: GHC determine illegal kind for standalone deriving with Deriving via
-------------------------------------+-------------------------------------
        Reporter:  mizunashi_mana    |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:  8.6.1
       Component:  Compiler          |              Version:
      Resolution:                    |             Keywords:  deriving
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:  14331             |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Changes (by RyanGlScott):

 * cc: kosmikus (added)
 * blockedby:   => 14331


Comment:

 This is indeed a known limitation of the way `deriving` declarations are
 typechecked.

 //Short answer//: You can work around the issue by introducing an explicit
 type signature, i.e.,

 {{{#!hs
 deriving via (f :: * -> *) instance Functor f => Functor (FunctorWrapped
 f)
 }}}

 //Long answer//: Any type variables quantified by `via` are kind-checked
 in isolation, without any information that might be gleaned from
 bidirectionally kind-checking the instance head. This means that GHC sees:

 {{{
 deriving via f ...
 }}}

 And hastily concludes that `f` is of kind `*`. Bummer.

 We (kosmikus, Iceland_jack, and I) discussed this at some length in
 https://github.com/RyanGlScott/ghc/issues/29, and came to the conclusion
 that we might be able to fix this issue by introducing fresh unification
 variables when kind-checking, then unifying, and then
 generalizing/skolemizing if there are any unfilled unification variables
 left. This bears a close resemblance to the algorithm described in
 https://ghc.haskell.org/trac/ghc/ticket/14331#comment:31, so I'm going to
 claim that this ticket is blocked by #14331.

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


More information about the ghc-tickets mailing list