Как реализовать пользовательские методы равенства в типах F # со статически разрешенными параметрами типа?
Я пытался сделать это следующим образом:
[<CustomEqualityAttribute>]
type Fraction< ^a when ^a: equality and ^a : (static member (*): ^a * ^a -> ^a) > (nominator: ^a, denominator: ^a) =
member inline this.Nominator = nominator
member inline this.Denominator = denominator
member inline this.IsEqualTo(other: Fraction< ^a >) = this.Nominator * other.Denominator = other.Nominator * this.Denominator
override inline this.Equals(other: obj) =
match obj with
| :? Fraction< ^a > as f -> this.IsEqualTo(f)
| _ -> false
Я получаю следующую ошибку на this.Equals
строка:
Этот элемент, функция или объявление значения не могут быть объявлены как «встроенные»
Почему это так?Это потому что Equals
является переопределением?Если это так, есть ли способ реализовать пользовательское равенство или я вынужден использовать IEqualityComparer
?