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