source/domains/abstractSetDomain.mli (46 lines of code) (raw):
(*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*)
module type ELEMENT = sig
type t [@@deriving show]
val name : string
val compare : t -> t -> int
end
module type SET = sig
type t
type element
val empty : t
val is_empty : t -> bool
val singleton : element -> t
val add : element -> t -> t
val remove : element -> t -> t
val mem : element -> t -> bool
val union : t -> t -> t
val inter : t -> t -> t
val subset : t -> t -> bool
val diff : t -> t -> t
val map : (element -> element) -> t -> t
val filter : (element -> bool) -> t -> t
val fold : (element -> 'a -> 'a) -> t -> 'a -> 'a
val exists : (element -> bool) -> t -> bool
val of_list : element list -> t
val elements : t -> element list
val show_element : element -> string
val element_name : string
end
module type S = sig
include AbstractDomainCore.S
type element
type _ AbstractDomainCore.part += Element : element AbstractDomainCore.part
val add : element -> t -> t
val remove : element -> t -> t
val contains : element -> t -> bool
val singleton : element -> t
val elements : t -> element list
val of_list : element list -> t
end
module MakeWithSet (Set : SET) : S with type element = Set.element
module Make (Element : ELEMENT) : S with type element = Element.t