Дискриминационные объединения и другие примитивные типы в F # по умолчанию используют структурное равенство и предоставляют сгенерированное переопределение для метода .Equals. Очевидно, что оператор равенства F # отличается от оператора C # тем, что он использует метод .Equals даже для ссылочных типов, но когда из C # используются различимые объединения F #, используется оператор по умолчанию == для объекта, который проверяет равенство ссылок, а не структурное равенство.
Почему F # не генерирует пользовательский оператор == для различающихся типов объединений, так что == дает ожидаемое поведение при использовании в других языках .NET?