
#9858: Typeable instances should be kind-aware -------------------------------------+------------------------------------- Reporter: dreixel | Owner: dreixel Type: bug | Status: new Priority: highest | Milestone: 7.10.1 Component: Compiler | Version: 7.9 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: None/Unknown | Unknown/Multiple Blocked By: | Test Case: Related Tickets: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by oerjan): I was going to say that this need to do kind decomposition when inferring `Typeable` instances is why this cannot be done just with standalone instances, and you need a solver. In fact the last time I gave up on my [comment:33 attempt] to express this in source code, it was because I realized that the fundamental instance {{{ instance (Typeable a, Typeable b) => Typeable (a b) }}} already needs such decomposition to be written. But today I had an epiphany: This ''can'' be expressed with current types, although with the annoying need to wrap kinds in proxies: {{{ -- Ideally k itself should be the class argument, but that is not yet -- supported. I think this is what makes UndecidableInstances -- necessary for defining instances. Fortunately the instances seem to be -- usable without it. class (KindableParts a, a ~ Proxy) => Kindable (a :: k -> *) where type KindableParts a :: Constraint kindRep :: KindRep a class Kindable (Proxy :: k -> *) => Typeable (a :: k) where typeRep :: proxy a -> TypeRep }}} I wrote up enough of a mock implementation to make the last test case above work with this. The code is a bit long, so I put it [http://oerjan.nvg.org/haskell/TypeableDesign/ on my website]. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9858#comment:48 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler