I'd like to be sure when one defines a type with "type", it truly merely creates a synonym, and no matter what one could replace the left side by the right side in the whole program, and vice versa, and it wouldn't change a thing in the actual meaning, value of the program.

Eg if i define:
type In2 t = t -> t -> t
I can thereafter replace for any type t, any signature like
f :: t -> t -> t
with
f :: In2 t
then strictly no consequence other than visual in the source code, by me, will occur.
Thanks!