[Haskell-cafe] Re: Functional dependencies and Peano numbers
Brent Yorgey
byorgey at seas.upenn.edu
Tue Jul 13 06:31:13 EDT 2010
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
More information about the Haskell-Cafe
mailing list