type ('a, 'b) pair = Pair of 'a * 'b
let (x : (int,char) pair) = Pair[int, char] (0, 'a')
let (y : (char,int) pair) = Pair[char, int] ('a', 0)
let
['d 'c] (f : 'c -> 'd -> ('c,'d) pair) =
  ['d 'c] fun (x_1 : 'c) -> fun (y_1 : 'd) -> Pair['c, 'd] (x_1[], y_1[])
let (z : (int,unit) pair) = f[unit, int] 0 ()