
How is that neither here nor there? Haskell says that types belong to classes, and each (type) instance of a class has a specific implementation. The fact that GHC implements this using dictionaries is irrelevant. It’s perfectly valid to implement type classes with partial evaluation, or matching on type parameters, or even C++-style templates. How is this point relevant? As far as I understand typeclasses enjoy
In other words: no, coherency is not preserved. You can’t change the semantics of classes and then say that programs built around the old semantics were wrong all along. Correct, although that's not what I said. I just said that a case could be made for saying the design of programs around global uniqueness was
On 10/1/2014 10:49 PM, David Menendez wrote: three properties: confluence, coherence and global uniqueness. These are defined as follows: * Confluence: Constraint-solving always terminates with the same sets of constraints on terms. * Coherence: The same instance is always chosen for terms. * Global uniqueness: For any type and typeclass, there exists at most one instance of the typeclass for the type. What I suggested was to weaken global uniqueness to local uniqueness, defined as: * Local uniqueness: For any type and typeclass, in any scope there exists at most one instance of the typeclass for the type. And a scope is a set of parallel bindings, introduced by a module declaration, let expression or where clause. Since this only affects global uniqueness, I fail to see how concerns about coherence being lost are relevant. poorly thought out. I admit that these changes will require people to redesign such programs. I'm not convinced this is a bad thing. I am sorry for not being clearer to begin with. Gesh