Следующее расширение типа
module Dict =
open System.Collections.Generic
type Dictionary<'K, 'V> with
member this.Difference(that:Dictionary<'K, 'T>) =
let dict = Dictionary()
for KeyValue(k, v) in this do
if not (that.ContainsKey(k)) then
dict.Add(k, v)
dict
дает ошибку:
Подпись и реализация несовместимы, потому что объявление параметра типа 'TKey' требует ограничения формы 'TKey: Equity
Но когда я добавляю ограничение, оно дает ошибку:
Объявленные параметры типа для этого расширения типа не соответствуют объявленному типу параметры исходного типа 'Dictionary <, >'
Это особенно загадочно, потому что следующее расширение типа не имеет ограничений и работает.
type Dictionary<'K, 'V> with
member this.TryGet(key) =
match this.TryGetValue(key) with
| true, v -> Some v
| _ -> None
Теперь у меня странные мысли: is ограничение требуется только при доступе к определенным членам?