[GHC] #9200: Milner-Mycroft failure at the kind level

GHC ghc-devs at haskell.org
Fri Jun 13 15:08:59 UTC 2014


#9200: Milner-Mycroft failure at the kind level
----------------------------------------------+----------------------------
        Reporter:  ekmett                     |            Owner:
            Type:  bug                        |           Status:  new
        Priority:  normal                     |        Milestone:
       Component:  Compiler (Type checker)    |          Version:  7.8.2
      Resolution:                             |         Keywords:
Operating System:  Unknown/Multiple           |     Architecture:
 Type of failure:  GHC rejects valid program  |  Unknown/Multiple
       Test Case:                             |       Difficulty:  Unknown
        Blocking:                             |       Blocked By:
                                              |  Related Tickets:
----------------------------------------------+----------------------------

Comment (by ekmett):

 Just a thought, in our compiler for Ermine we use a strategy very close to
 Mark P Jones' strategy with CUSKs.

 However when we have a type that is not fully what you'd call a CUSK
 because at least one of the type variables are unannotated we actually
 allow it to participate in a binding group SCC like any other type.

 We instantiate '''just''' those unannotated positions in the type with
 fresh kind variables not all.

 Then we run through the binding group checking subsumption for each,
 letting those checks accrete constraints on the unannotated types before
 we generalize over the whole SCC.

 A universe level down the code looks like:

 https://github.com/ermine-
 language/ermine/blob/master/src/Ermine/Inference/Type.hs#L150

 At the kind level the code is in a local branch and I'll push it out to
 github soon.

 This lets us fit somewhere in the middle between Mark P Jones' strategy
 and Richard's.

 Unannotated variables participate in cycles and unify out to whatever they
 must, while kind variables supplied explicitly annotated types can't be
 forced to unify with them without yielding skolem escapes.

 The rule then becomes that if you annotate some types with a kind
 involving explicit kind variable in a class declaration all kinds that
 unify with that kind variable will need to be annotated, but other kinds
 can be left untouched.

 In exchange you don't get more specific kinds than you ask for #9201, we
 can handle partially annotated polymorphic recursion like occurs here, and
 existing code so long as it doesn't rely on #9201 would still typecheck.

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


More information about the ghc-tickets mailing list