sig
  type t
  val empty : Bogue.Selection.t
  val is_empty : Bogue.Selection.t -> bool
  val size : Bogue.Selection.t -> int
  val to_list : Bogue.Selection.t -> (int * int) list
  val of_list : (int * int) list -> Bogue.Selection.t
  val range : int * int -> Bogue.Selection.t
  val first : Bogue.Selection.t -> int
  val last : Bogue.Selection.t -> int
  val mem : Bogue.Selection.t -> int -> bool
  val toggle : Bogue.Selection.t -> int -> Bogue.Selection.t
  val remove : Bogue.Selection.t -> int -> Bogue.Selection.t
  val add : Bogue.Selection.t -> int -> Bogue.Selection.t
  val union : Bogue.Selection.t -> Bogue.Selection.t -> Bogue.Selection.t
  val intersect : Bogue.Selection.t -> Bogue.Selection.t -> Bogue.Selection.t
  val invert :
    first:int -> last:int -> Bogue.Selection.t -> Bogue.Selection.t
  val sprint : Bogue.Selection.t -> string
  val iter : (int -> unit) -> Bogue.Selection.t -> unit
end