
#16362: Deriving a class via an instance that has a TypeError constraint using standalone deriving fails during compilation. -------------------------------------+------------------------------------- Reporter: j9794 | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.6.3 Resolution: | Keywords: | CustomTypeErrors Operating System: Unknown/Multiple | Architecture: Type of failure: GHC rejects | Unknown/Multiple valid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by diatchki): If I understand what's going on here, the custom type errors work as intended. I think of using `TypeError` in the context of an instance declaration as saying "this instance does not exist". I think it would be nicer to have an actual language construct to say that, but for the time being `TypeError` is convenient "hack" that achieves a similar result. So, the standalone instance in the original example has to derive and instance for `Num Foo` by using the non-existing instance for `NotNum Foo`. As a result GHC reports that it can't do that, using the custom type error provided. I think that this makes sense. OTOH, if you write the alternative that Ryan wrote: {{{ deriving via (NotNum Foo) instance TypeError (Text "Not a num") => Num Foo }}} you are really saying that there is no instance for `Num Foo` and for the exact same reason that there is no instance for `NotNum Foo`. Deriving a non-existing instance seems like a bit of an odd thing to do though, as there is nothing to derive... I guess it makes sense if you are trying to report a class of errors in the same way, but you could get the same by just writing the instance without deriving: {{{ instance Num (NotNum Foo) => Num Foo }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/16362#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler