let (1, 2) = ()
let (1, 2) as tup = ()
let ((1 as p1), (2 as p2)) = ()
let (1, 2) = ()
let ((1 : int), (2 : int)) = ()
let ((1 : int), (2 : int)) as tup = ()
let (((1 : int), (2 : int)) : (int * int)) = ()
let ((((1 : int), (2 : int)) as tup) : (int * int)) = ()
let (((1 : int), (2 : int)) : (int * int)) as tup = ()
;;match x with
  | (1, 2) -> ()
  | (1, 2) as tup -> ()
  | (1, 2) -> ()
  | ((1 : int), (2 : int)) -> ()
  | (((1 as p1) : int), ((2 as p2) : int)) as tup -> ()
  | (((1 : int), (2 : int)) : (int * int)) -> ()
  | (((1 : int), (2 : int)) : (int * int)) as tup -> ()
let f [arity:1]x = ()
let f [arity:1]x = ()
let f [arity:1](x, y) = x + y
let f [arity:1](((x as p1), (y as p2)) as tup) = x + y
let f [arity:1]((x, y) : (int * int)) = ()
let f [arity:1]((x, y) : (int * int)) = ()
let f [arity:1]((((x, y) as tup1) : (int * int)) as tup) = ()
;;for (x, y) = 0 to 10 do () done
;;for (x, y) as tup = 0 to 10 do () done
;;for (x, y) = 0 to 10 do () done
;;for ((x as p1), (y as p2)) = 0 to 10 do () done
;;for (x, y) as tup = 0 to 10 do () done
;;for (x, y) = 0 to 10 do () done
;;for (x, y) as tup = 0 to 10 do () done
;;for ((x as p1), (y as p2)) as tup = 0 to 10 do () done
;;for ((x, y) : (int * int)) = 0 to 10 do () done
;;for ((x, y) : (int * int)) as ctup = 0 to 10 do () done
;;for ((x, y) : (int * int)) as ctup = 0 to 10 do () done