data T = <a>(S) | <b>(S) | <c>;
data S = <a>(S) | <c>;

g ( x :: T ) = f(x);
f( <a>(x) ) = <a>(f(x));
f( <b>(x) ) = <a>(f(x));
f( <c>    ) = <c>;
