David, this seem to work similar to forall...:

synonym is not compatible with T a b.

you see, I hope to mix synonym with original T a b in a chain of fun calls. 

Some of the funs accept args like this:
fun1::T a b -> a -> out1

.. and others - like this:
fun2::T' -> out2
in both cases a and b are not set. However in fun1 I try to enforce type 'a' in the arg #2.