Ashley Yakeley:
GHC wrote:
#3485: "Illegal type synonym family application in instance" error is unnecessary,
should be removed
------------------------------------- +-------------------------------------- Reporter: Ashley Yakeley | Owner: Type: bug | Status: closed Priority: normal | Milestone: Component: Compiler (Type checker) | Version: 6.10.4 Severity: normal | Resolution: invalid Keywords: | Testcase: Os: Unknown/ Multiple | Architecture: Unknown/Multiple ------------------------------------- +--------------------------------------
Changes (by chak):
 * status:  new => closed
 * resolution:  => invalid
Comment:
I am not sure what you are suggesting. We cannot automatically transform
{{{
instance C (Fam Int)
}}}
into
{{{
instance (Fam Int ~ famint) => C famint
}}}
This works if there is only one instance, but as soon as there are two
such instances, they always overlap.
Maybe you are suggesting that we should do it anyway and programmers
should just take the implicit transformation into account. I don't think that this is a good idea. It's confusing for very little benefit (as you can always write the transformed instance yourself with little effort).

I don't see what the problem is. "instance C (Fam Int)" has an unambiguous, and logically acceptable, meaning to the compiler. Why do we force the programmer to make an ugly workaround involving introducing a type variable?

I think the proposed change is confusing.  Two instances

  instance C (Fam Int)
  instance C (Fam Bool)

appear to be syntactically distinct, but they semantically overlap. The explicit form

  instance (Fam Int ~ famint) => C famint

is IMHO much clearer and really not much more verbose.

Manuel

_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to