
#14047: "Illegal instance for type synonym" while deriving Typeable1 for data type -------------------------------------+------------------------------------- Reporter: alexbiehl | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.2.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #13267 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by RyanGlScott): * os: Windows => Unknown/Multiple * architecture: x86_64 (amd64) => Unknown/Multiple * related: => #13267 Comment: This is expected behavior, see #13267. As it turns out, allowing type synonyms to be used as instance heads is extremely tricky to get right, and GHC decided to disallow this in 8.2.1 due to incorrect results one could achieve with nonsense like: {{{ type ShowF a = Show (a -> Bool) instance ShowF Int where show _ = "Fun" }}} As for your particular program, the workaround is simple: just don't derive `Typeable`! Every type automatically has `Typeable` instances these days, so deriving `Typeable` is a no-op. As you've noted `Typeable1` //et al.// have long been deprecated in favor of `Typeable`, and given that they're far less useful than they were in the past, I propose just removing `Typeable1` and friends altogether. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14047#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler