Соответствие шаблону F # очень мощное, поэтому было естественно писать:
match (tuple1, tuple2) with
| ((a, a), (a, a)) -> "all values are the same"
| ((a, b), (a, b)) -> "tuples are the same"
| ((a, b), (a, c)) -> "first values are the same"
// etc
Однако первое совпадение шаблонов дает ошибку компилятора:
'a' is bound twice in this pattern
Есть ли более чистый способ сделать это, чем следующее?
match (tuple1, tuple2) with
| ((a, b), (c, d)) when a = b && b = c && c = d -> "all values are the same"
| ((a, b), (c, d)) when a = c && b = d -> "tuples are the same"
| ((a, b), (c, d)) when a = c -> "first values are the same"
// etc