
#14331: Overzealous free-floating kind check causes deriving clause to be rejected -------------------------------------+------------------------------------- Reporter: RyanGlScott | Owner: (none) Type: bug | Status: merge Priority: normal | Milestone: 8.2.2 Component: Compiler (Type | Version: 8.2.1 checker) | Resolution: | Keywords: deriving Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: GHC rejects | Test Case: valid program | deriving/should_compile/T14331 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj):
there can be more unification after part (i) if you are deriving Functor, Foldable, or Traversable
That is terrible! I had no idea we did this. It seems absurdly ad-hoc. I can see two ways forward. 1. Require standalone deriving in such cases. It's not so bad, and is a lot clearer! I'm against inferring too much. Indeed I'd happily weaken our existing inference further. (Acknowledging back-compat issues.) 2. Do it properly. That is, after simplifying the instance constraints we'll end up with`k~Type` in these cases, and perhaps others. Instead of rejecting such constraints as too exotic, simply commit to them. That's the "extra unification". -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14331#comment:37 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler