
#11719: Cannot use higher-rank kinds with type families -------------------------------------+------------------------------------- Reporter: ocharles | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.8.1 Component: Compiler (Type | Version: 8.0.1-rc2 checker) | Resolution: | Keywords: TypeInType Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: GHC rejects | Test Case: valid program | dependent/should_compile/T11719 Blocked By: | Blocking: Related Tickets: #13913 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by goldfire): The difference with terms is that the arity of type families matters. `F1` has arity 1, while `F2` has arity 0. The real question is: where is the `k` bound. In `F1`, `k` is bound "before the colon", while in `F2`, it's bound after the colon. In terms of [https://github.com/goldfirere/ghc- proposals/blob/pi/proposals/0000-pi.rst#the-quantifier-table this syntax]: {{{ F1 :: foreach k . k -> Type F2 :: foreach k '. k -> Type }}} Both are really `foreach`-kinds, like @int-index observed. The difference is that `F1`'s argument is not matchable. (Perversely, type families can pattern-match only on unmatchable arguments. Perhaps a name change is in order.) On the other hand, `F2`'s argument is matchable, as it's declared to be so. (Recall that every abstraction in a kind is currently interpreted as matchable, even though the future syntax for matchable kinds will change.) Accepting the program in comment:15 seems like an egregious bug, to me. I've reported it as #15740. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11719#comment:19 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler