two functions taking the same anonymous tuple type produce just
one synthesized type entry.
<<<
f = fun (a (int, int)) int { return 0 }
g = fun (b (int, int)) int { return 0 }
>>>
(unit
(types
(type 0 int primitive)
(type 1 uint primitive)
(type 2 bool primitive)
(type 3 string primitive)
(type 4 float primitive)
(type 5 byte primitive)
(type 6 ascii primitive)
(type 7 void primitive)
(type 8 __cat_type_0 synthetic structure (field _0 (ref int)) (field _1 (ref int)) (depends_on 0 0)))
(functions
(function 0 f (returns (ref int)) (param a (ref __cat_type_0)) (block
(return (expr 0))
))
(function 1 g (returns (ref int)) (param b (ref __cat_type_0)) (block
(return (expr 0))
)))
(emission_order 0 1 2 3 4 5 6 7 8))