
You can get an equivalent to cyclic dependencies using equality constraints. (I'll reply to Oleg's example of Sum.) But I agree that my mechanical translation doesn't usually get you to the result.
So my GSOC project idea would be to see how far you might get with a more sophisticated translation.
Just assuming for the moment that you can actually translate fundeps completely into type equality coercions. Then that would be, to me, a good reason to (A) make sure that the implementation actually uses this encoding internally, and (B) keep fundep notation as syntactic sugar. I think the main "problem" of the type families vs. fundeps discussion is that they're two rather involved language extensions that in addition have very subtle differences. In this situation, you wouldn't really want to have both be an official part of the language (although that's the de facto reality we're living in since many years). If, however, there's a correct and complete unification of the two concepts in terms of a common underlying formalism, then I don't necessarily see why we should deprecate one. Cheers, Andres