
#15052: DeriveAnyClass instances may skip TypeError constraints -------------------------------------+------------------------------------- Reporter: jcpetruzza | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.2.2 Resolution: | Keywords: | CustomTypeErrors Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by jcpetruzza): Ok, I think I understand your point: what we see follows from the documented behaviour for `DerivingAnyClass` so there is really no bug here. Tbh, I hadn't noticed until right now that `deriving` would propagate constraints coming from the default signatures! The initial example in the docs says:
{{{#!haskell data Foo = Foo deriving (Show, SPretty) }}}
The above code is equivalent to:
{{{#!haskell data Foo = Foo deriving Show instance SPretty Foo }}}
and somehow the idea that `deriving` would declare the instance over an empty context got stuck in my head for a long time. Hence my insistance in expecting the results to be the same! (maybe `Foo a` would make for a better example there?) In any case, I agree that `deriving` is doing the right thing here. It is a bit unfortunate since I'm not sure I want to use `TypeError` as it is for generic default methods then, but on the other hand, without it error messages can be a screenful! -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15052#comment:13 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler