
#7543: Constraint synonym instances ---------------------------------+------------------------------------------ Reporter: monoidal | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.6.1 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: None/Unknown Difficulty: Unknown | Testcase: Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Changes (by ekmett): * cc: ekmett@… (added) Comment: FWIW some form of fix for this would be quite useful to me as well. In the {{{lens}}} package we have a lot of classes that look like {{{ class Foo s t a b | s -> a, t -> b, s a -> t, t a -> s }}} where s = t, a = b are always legal to instantiate, so many instances look like {{{ class IsText Text Text Char Char }}} when we're dealing with these 4 parameter families for data types we adopt the convention that {{{ type Foo' a b = Foo a a b b }}} But we cannot do this for the declaration site for the instances. If we could this would (eventually, when we can remove support for pre- constraint kinds compilers) enable us to more easily expand our definitions later on. More pie-in-the-sky would be being able to use {{{ type Foo a b = Bar a => Baz a b }}} {{{ instance Foo a b }}} as {{{ instance Bar a => Baz a b }}} it would be consistent with the other uses of type, but {{{Bar a => Baz a b}}} doesn't (currently) have a sensible kind. -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7543#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler