diff --git a/sledge/nonstdlib/NSSet.ml b/sledge/nonstdlib/NSSet.ml index 77bf96dce..321ddcfaf 100644 --- a/sledge/nonstdlib/NSSet.ml +++ b/sledge/nonstdlib/NSSet.ml @@ -75,6 +75,11 @@ struct let choose_exn = S.choose let pop = S.pop_opt let pop_exn = S.pop + + let pop_min_elt_exn s = + let min = S.min_elt s in + (min, S.remove min s) + let only_elt = S.only_elt let classify = S.classify let map s ~f = S.map f s diff --git a/sledge/nonstdlib/NSSet_intf.ml b/sledge/nonstdlib/NSSet_intf.ml index d91523de2..16476f7e0 100644 --- a/sledge/nonstdlib/NSSet_intf.ml +++ b/sledge/nonstdlib/NSSet_intf.ml @@ -88,6 +88,9 @@ module type S = sig val pop_exn : t -> elt * t (** Find and remove an unspecified element. [O(1)]. *) + val pop_min_elt_exn : t -> elt * t + (** Find and remove the minimum element. [O(1)]. *) + (** {1 Transform} *) val map : t -> f:(elt -> elt) -> t