added print_mode: string list ref (order of printer tables);
multiple disjoint printer tables, to be combined hierarchically;
multiple entries in printer tables (matched in order);
signature Mask_sig =sig datatype 'a binding = |-> of ('a * 'a) (* infix 7 |->; *) type mask val ERR : maskend