
#9123: Need for higher kinded roles -------------------------------------+------------------------------------- Reporter: simonpj | Owner: goldfire Type: bug | Status: new Priority: normal | Milestone: Component: Compiler (Type | Version: 7.8.2 checker) | Keywords: Roles, Resolution: | QuantifiedConstraints Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): I think Coercible is a special case because `Coercible p q` and `p ~R# q` really are inter-convertible. Not so for `Eq a` and `Ord a`. And there might be many classes that happen to have `Eq a` (perhaps distantly transitively) as a superclass. Are we really going to search for a solution via all of those? Now we are into backtracking. It can go wrong with `~R#` too. Suppose we said {{{ class (a ~R# b) => C a b where op :: a -> b }}} Now if we want `t1 ~R# t2`, one route might be by seeking `C t1 t2`. This way lies madness. I could live with a special case for `Corecible`/`~R#` and `~`/`~N#`. But the general case looks swampy. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9123#comment:44 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler