一般的な等価/比較メンバーの設計ガイドラインは、可変参照型に構造的等価性を実装しないことですが、可変フィールドを持つ F# レコード型を見てください。
type Value = { mutable value: int }
let mutableRecord = { value = 1 }
let xs = Map.ofList [ mutableRecord, "abc"
{ value = 2 }, "def" ]
let abc = Map.find { value=1 } xs
mutableRecord.value <- 3
let abc = Map.find { value=3 } xs // KeyNotFoundException!
はMap
内部でソートされmutable
ますが、レコード インスタンスが既にマップ内にある場合でも、レコード フィールドを使用すると順序を変更できます。これは非常に悪いことです。
F# は、変更可能なフィールドを宣言する F# レコード型に対してモードを推論する必要がある[<NoEquality>]
と思いますね。[<NoComparison>]