
#16139: GHC confused about type synonym kind with QuantifiedConstraints -------------------------------------+------------------------------------- Reporter: Ashley Yakeley | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.6.3 Resolution: | Keywords: | QuantifiedConstraints Operating System: Unknown/Multiple | Architecture: Type of failure: GHC rejects | Unknown/Multiple valid program | Test Case: Blocked By: | Blocking: Related Tickets: #11621, #11715, | Differential Rev(s): #13742, #16148 | Wiki Page: | -------------------------------------+------------------------------------- Comment (by goldfire): `type Constraint = TYPE ConstraintRep` won't work because levity- polymorphic functions would have an unknowable number of explicit arguments. Take something like `absX :: forall (r :: RuntimeRep) (a :: TYPE r). NumX a => a -> a`. (This is possible if `NumX` is levity polymorphic.) How many explicit arguments does `absX` take? It depends on the choice of `r`, because what looks like the one explicit argument becomes implicit if `r` is `ConstraintRep`. Even worse, this function would ''return'' a constraint, something we don't currently allow for normal functions. What would work is `type Constraint = TYPE LiftedRep YesIsConstraint`, where we index `TYPE` by yet another flag. That's the most principled answer here, but it seems like using a sledgehammer to tap in a nail. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/16139#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler