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