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.