
#9858: Typeable instances should be kind-aware -------------------------------------+------------------------------------- Reporter: dreixel | Owner: Type: bug | Status: merge Priority: highest | Milestone: 7.10.2 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: | typecheck/should_fail/T9858a, | should_run/T9858b | Blocking: | Differential Revisions: Phab:D652 -------------------------------------+------------------------------------- Comment (by oerjan): Although Edward's suggestion is elegant, I am thinking that separating `Typeable (() :: Constraint)` and `Typeable (() :: *)`, in the same way as promoted constructors have been separated from identically named datatypes, is all that is needed to stop this bug without outlawing Typeable constraints. I think it is impossible to construct two types of the same kind with identical `TypeRep`s without using the kind ambiguity of `()`. Although intuitively, `Typeable` for tuple constructors and `->` vs. `=>` should also be separated, just in case. But the former only pass *on* kind ambiguity, while the latter *merge* it. Only `()` can create it in such a way that it can be merged back (by `->`/`=>`) later. Which means `->`/`=>` is also necessary, I guess, so if you wanted to outlaw the most impredicative `Typeable`s, you could outlaw just "`Typeable ((=>) ...)`" instead. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9858#comment:91 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler