[GHC] #13408: Consider inferring a higher-rank kind for type synonyms

GHC ghc-devs at haskell.org
Mon Oct 29 16:45:13 UTC 2018


#13408: Consider inferring a higher-rank kind for type synonyms
-------------------------------------+-------------------------------------
        Reporter:  goldfire          |                Owner:  (none)
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.0.1
      Resolution:                    |             Keywords:  TypeInType
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Changes (by RyanGlScott):

 * status:  closed => new
 * resolution:  wontfix =>


Comment:

 I talked with goldfire today about this issue, but in a slightly different
 context. The issue this time was that I had:

 {{{#!hs
 data A :: Type -> Type
 data B a :: A a -> Type
 }}}

 And I wanted to define a type synonym alias for `B`:

 {{{#!hs
 type C = B
 }}}

 This time, we came to the opposite conclusion of comment:2 — that is, GHC
 //should// be able to accept this. There are two main reasons why:

 * Unlike in the original example, in which the RHS of a type synonym was
 attempting to partially apply a type synonym (which is problematic), there
 is no problem with partially applying a data type constructor such as `B`.
 * The implementation might be easier than what goldfire had originally
 thought when writing comment:2. In the code that kind-checks type synonym
 declarations, we would need to check that the type synonym is the sole
 declaration in a mutually recursive group. (That is to say, no funny
 business with recursion is going on.) If this holds true, then we could
 grab the kind from the RHS (even if it's fancy, like the kind of `B ::
 forall a -> A a -> Type`) and use that to infer the kind of the whole type
 synonym.

 Having this work is especially important in the context of this particular
 example since there is currently no way to write the kind `forall a -> A a
 -> Type` in source Haskell. (If there were a way to write this, then `type
 C = (B :: forall a -> A a -> Type)` would already be a suitable
 workaround.)

 goldfire, please correct me if I got any details wrong here.

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


More information about the ghc-tickets mailing list