compiler can't solve overloading

The compiler can't solve the overloading of g in the definition of f. With Int instead of String is works, so it's probably another problem with type synonyms.

class C a b :: a -> b

f :: a -> () | C a String
f a = g a ""

g :: a b -> () | C a b 
g _ _ = undef