Derived2 creates a comparator function that constructs a comparator for the type
('a, 'b) t given comparators for the type 'a and 'b.
M : sig ... endval comparator : ('a, 'cmp_a) comparator ‑> ('b, 'cmp_b) comparator ‑> (('a, 'b) t, ('cmp_a, 'cmp_b) comparator_witness) comparator