y
фактически является новым именем для того, с чем оно сопоставляется, и оно совпадает с именем y
. Это эквивалентно:
let matchElement x y =
match x with
| (z, _) -> true (* A completely unrelated binding *)
| _ -> false;;
Где вы видите, что все значения x
соответствуют первому шаблону.
Чтобы сделать то, что вы хотите сделать, вы можете написать это:
let matchElement x y =
match x with
| (y', _) when y' = y -> true
| _ -> false
(* Or equivalently *)
let matchElement (x, _) y = x = y