Не зная больше о ваших требованиях, я бы сказал, что ваниль Set<'a>
делает более чем адекватную работу.Я бы предпочел «Set», а не «List», чтобы у вас всегда был O (lg n) доступ к самым большим и самым маленьким элементам, что позволяет вам упорядочить свой набор по дате / времени вставки для эффективного доступа к самым новым и самым старым элементам.
Кажется, что обернуть набор так легко, что его методы Add / Remove вызывают ваши обратные вызовы:
type AwesomeSet(internalSet : Set<'a>, insertCallback : 'a -> unit, removeCallback : 'a -> unit) =
member this.Add(x) =
insertCallback(x)
AwesomeSet(internalSet.Add x, insertCallback, removeCallback)
member this.Remove(x) =
removeCallback(x)
AwesomeSet(internalSet.Remove x, insertCallback, removeCallback)
member this.Count = internalSet.Count
member this.Min = internalSet.MinimumElement
member this.Max = internalSet.MaximumElement