_T_y_p_e_ _s_y_n_o_n_y_m_ _d_e_c_l_a_r_a_t_i_o_n_s These permit the user to introduce a new name for an already existing type, e.g. string == [char] type synonyms are entirely transparent to the typechecker (it best to think of them as being just macros). For obvious reasons, recursive type synonyms are not permitted. It is also possible to introduce a synonym for a type forming operator, by introducing generic type variable as parameters of the definition, e.g. invt * ** == (*->**)->(**->*) So within a script containing the above two `==' definitions, the type `invt num string' will be shorthand for (num->[char])->([char]->num)