
#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 int-e): Replying to [comment:33 oerjan]:
But anyway, here it is, sort of working, but with some obvious drawbacks:
One such drawback is that the `Kindable'` constraint is sort of infectious. One can using a type family for mapping kinds to types, which seems to overcome that particular shortcoming: {{{ type family KindRep (p :: k) data Star deriving Typeable type instance KindRep (Proxy :: * -> *) = Star type instance KindRep (Proxy :: (k -> k') -> *) = KindRep (Proxy :: k -> *) -> KindRep (Proxy :: k' -> *) -- some data kinds: () and [] type instance KindRep (Proxy :: () -> *) = () type instance KindRep (Proxy :: [k] -> *) = [KindRep (Proxy :: k -> *)] }}} One could then have {{{ instance Typeable (KindRep (Proxy :: k -> *)) => Typeable' (Proxy :: k -> *) }}} Here's some working code: http://lpaste.net/4263409010180358144 -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9858#comment:34 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler