
On Sun, Jul 11, 2010 at 12:43:47AM +0200, Jose A. Ortega Ruiz wrote:
On Sat, Jul 10 2010, wren ng thornton wrote:
[...]
Yes, you can add multiple dependencies. The syntax is to use , after the first |.
While having eight parameters is surely a desperate need for refactoring, there are times when you'd want multiple dependencies. For example, you can say
class F a b | a -> b, b -> a where...
to express a bijective function on types (that is, for every pair of A and B, if you know one of them then you know what the other must be uniquely).
I know i should read the relevant articles, but how would one express such a bijection using type families?
You would just create two type families, one for each direction of the mapping: type family F1 a :: * type instance F1 Int = Bool type instance F1 ... type family F2 a :: * type instance F2 Bool = Int type instance F2 ... Of course, this is not quite the same thing, since with the MPTC version we are guaranteed to get a bijection, but there is nothing forcing F1 and F2 to have anything to do with one another (for example I could have written type instance F2 Char = Int). But I don't know whether this would make a difference in practice. -Brent