我的类型为Job
,相等性定义为工作ID相等。决不能有两个具有相同ID的作业。但是,它们之间没有可比性,一项工作并不比另一项要“多”或“少”,而不能相等。
type JobId = JobId of string
[<CustomEquality; NoComparison>]
type Job = {
Id: JobId
} with
interface System.IEquatable<Job> with
member x.Equals y = x.Id = y.Id
type Resource = {
Id: string
Capacity: float
Usage: Map<Job,float>
}
Map
需要进行比较。
Map
需要比较?IDictionary
,但我正在尝试保持功能正常。)答案 0 :(得分:4)
在内部,F#的Map
是implemented as a balanced binary tree (specifically, an AVL tree),它需要比较其键类型才能确定任何项在树中的位置。对于不需要比较的哈希映射,PersistentHashMap
type from FSharpx.Collections可能就是您想要的。