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 _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
