
#12814: Should GND infer an instance context when deriving method-free classes? -------------------------------------+------------------------------------- Reporter: RyanGlScott | Owner: Type: bug | Status: new Priority: normal | Milestone: 8.2.1 Component: Compiler (Type | Version: 8.0.1 checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #11369, #12810 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): Replying to [comment:2 goldfire]:
Just infer the class constraint based on the constraints that arise when type-checking the generated definition.
I agree with this; and it's precisely what Ryan's patch does. `mkNewTypeEqn` generates the constraints that are necessary to satisfy the instance decl; they are then simplified, perhaps to nothing at all. We are going to generate {{{ instance ?? => C (N a) where ...type instances... op = coerce (op :: rep-ty) }}} So for each method (if any) we need * `C rep_ty` so that we have the underlying `op` * `op_ty[rep_ty] ~R op_ty[N a]` to for the coercion of the `op` If there are no methods we don't need any of those constraints. Ryan's notes above show that the result may perhaps not be what you want, but if not, just use a standalone deriving and specify the instance context. So I vote for this patch! -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12814#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler