You can make the functional dependency "circular":
class Class a b c | a->b, b->c, c->a where
getB :: a -> b
getC :: b -> c
so any one type parameter can be deduced from any of the others. But I'm not sure if you really want this; why not have just a type class with one fundep and one method, and make two instances of it (instance Class A B
and instance Class B C
)?