(* Complex numbers, parameterized over the real number representation *) type 'a cmplx = {re: 'a; im: 'a}