type 'a pair = Pair of 'a * 'a
class H 'a { x : 'a }
class H 'a => I 'a { y : 'a }
let
['b] [ I 'b ] (f : 'b -> ('b pair) pair) =
  ['b]
  fun (z : 'b) -> Pair['b pair] (Pair['b] (x['b], z[]), Pair['b] (y['b], z[]))