Re: [GHC] #12102: “Constraints in kinds” illegal family application in instance (+ documentation issues?)

GHC ghc-devs at haskell.org
Thu May 4 13:06:17 UTC 2017


#12102: “Constraints in kinds” illegal family application in instance (+
documentation issues?)
-------------------------------------+-------------------------------------
        Reporter:  Iceland_jack      |                Owner:  (none)
            Type:  bug               |               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:                    |
-------------------------------------+-------------------------------------

Comment (by goldfire):

 Good questions. Here are my thoughts:

 - Satisfying kind-level equality constraints is implemented in
 `Inst.tcInstBinderX`, called when a type is applied to some arguments. The
 code there handles both unboxed equality and boxed equality.

 - The "no `case`" problem in Simon's comment:5 is quite true. But this is
 OK, because such an equality constraint can never be a Given: constraints
 in types can't be used within the same type, but (I believe) these
 constraints scope only over a type (never a term).

 - This last point makes these new constraints somewhat like datatype
 contexts, but one does not desugar into the other.

 - Clearly, the output from `:info` is horrible.

 - The "no `forall` needed" is an interaction with CUSKs. This point should
 be clarified in the manual.

 - "Constrained type families" interacts poorly with today's story for kind
 families: constrained type families requires the use of class constraints,
 but class constraints aren't currently allowed in kinds. It would seem
 that it's best to implement constrained type families in the context of
 Dependent Haskell.

 - Bottom line: this feature is probably a misfire. It ''is'' marginally
 useful, as I think the example from the manual demonstrates. (That seems
 useful to me, at least.) But the implementation is very ad-hoc, and the
 fact that these constraints never appear as Givens take much of the air
 out of them. It would be easy enough to remove this feature for 8.2.

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


More information about the ghc-tickets mailing list