
#7485: Tuple constraints not properly kinded -------------------------------------+------------------------------------- Reporter: goldfire | Owner: Type: bug | Status: closed Priority: normal | Milestone: Component: Compiler | Version: 7.7 Resolution: invalid | Keywords: Operating System: Unknown/Multiple | ConstraintKinds Type of failure: None/Unknown | Architecture: Blocked By: | Unknown/Multiple Related Tickets: | Test Case: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by goldfire): Replying to [comment:3 crockeea]:
Is @simonpj 's comment
`(,)` has to have a particular kind still true with advent of `-XPolyKinds`?
Yes. The problem is that `(,)` isn't really poly-kinded. It's not, for example, `k -> k -> k`. It's either `* -> * -> *` or `Constraint -> Constraint -> Constraint`, and there's no way of saying this in normal Haskell. So, we have the hack Simon describes above. One possible way forward is to follow the NoSubKinds route: introduce a new type `ValueKind` parameterized by elements of `data StarOrConstraint = Star | Ct`. Then `*` would be a synonym for `ValueKind Star` and `Constraint` would be `ValueKind Ct`. We would then have `(,) :: forall (x :: StarOrConstraint). ValueKind x -> ValueKind x -> ValueKind x`. This would be very hard to implement before merging my DependentHaskell branch though, because it requires kind synonyms and other funny business. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/7485#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler