(*
** interfaces for some set operations
*)

(* ****** ****** *)

abstype set (a:t@ype) // boxed type

(* ****** ****** *)

fun{a:t@ype} compare (x: a, y: a): int

fun{a:t@ype} set_nil () : set (a) // empty set
fun{a:t@ype} set_sing (x: a): set (a)

fun{a:t@ype} set_ismem (xs: set a, x: a): bool

fun{a:t@ype} set_add (xs: set a, x: a): set a

fun{a:t@ype}
set_union (xs: set a, ys: set a): set a

fun{a:t@ype} set_make_list (xs: list0 a): set a

fun{a:t@ype}
set_foreach (xs: set a, f: a -<cloref1> void): void

(* ****** ****** *)

(* end of [genset.sats] *)