Martin Sulzmann wrote:
We're also looking for (practical) examples of "multi-range" functional dependencies

class C a b c | c -> a b

Notice that there are multiple (two) parameters in the range of the FD.

It's tempting to convert the above to

class C a b c | c -> a, c -> b

but this yields a weaker (in terms of type improvement) system.

I agree with Iavor.

In fact, the two sets of dependencies that you have given here
are provably equivalent, so it would be decidedly odd to have
a "type improvement" system that distinguishes between them.

While you're looking for unusual examples of fundeps, you
might also want to consider things like:

  class C a b c | a -> b, b -> c

Note that this is subtly different from a -> b c because

  {a -> b, b -> c}  |=  {a -> b c}

while the reverse does not hold.  Instead of type classes,
I'll give you some more down-to-earth examples of relations
that satisfy these dependencies:

  {Paper, Conference, Year}
  {Professor, University, Country}
  {Person, FavoriteFood, FoodGroup}
  ...

For further insight, you might want to take a look at the theory
of relational databases to see how functional dependencies are
used there.  In that context, some sets of dependencies (such
as {a -> b, b -> c}) can be interpreted as indicators of bad
design.  This, in turn, might give you some ideas about the kinds
of dependencies you can expect to encounter in well-designed
Haskell code.  (Of course, you might still find examples in other
Haskell code of dependencies that would make a database person
wince :-)

All the best,
Mark
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to