sig
  type 'a t
  val empty : unit -> 'Worklist.t
  val clear : 'Worklist.t -> unit
  val is_empty : 'Worklist.t -> bool
  val mem : 'Worklist.t -> '-> bool
  val choose : 'Worklist.t -> 'a
  val remove : 'Worklist.t -> '-> unit
  val add : 'Worklist.t -> 'a list -> unit
  val extract : 'Worklist.t -> 'a
  val single : '-> 'Worklist.t
  val union : 'Worklist.t -> 'Worklist.t -> unit
end