sig
  type t = private { lo : int; hi : int; }
  val make : int -> int -> Biocaml_range.t Core.Std.Or_error.t
  val make_unsafe : int -> int -> Biocaml_range.t
  val size : Biocaml_range.t -> int
  val member : Biocaml_range.t -> int -> bool
  val to_string : Biocaml_range.t -> string
  val to_list : Biocaml_range.t -> int list
  val overlap : Biocaml_range.t -> Biocaml_range.t -> int
  val gap : Biocaml_range.t -> Biocaml_range.t -> int
  val union :
    Biocaml_range.t ->
    Biocaml_range.t ->
    [ `Disjoint of Biocaml_range.t * Biocaml_range.t
    | `Joint of Biocaml_range.t ]
  val intersect :
    Biocaml_range.t -> Biocaml_range.t -> Biocaml_range.t option
  val before : Biocaml_range.t -> Biocaml_range.t -> bool
  val after : Biocaml_range.t -> Biocaml_range.t -> bool
  val strict_before : Biocaml_range.t -> Biocaml_range.t -> bool
  val strict_after : Biocaml_range.t -> Biocaml_range.t -> bool
  val compare_positional : Biocaml_range.t -> Biocaml_range.t -> int option
  val subset : Biocaml_range.t -> Biocaml_range.t -> bool
  val superset : Biocaml_range.t -> Biocaml_range.t -> bool
  val strict_subset : Biocaml_range.t -> Biocaml_range.t -> bool
  val strict_superset : Biocaml_range.t -> Biocaml_range.t -> bool
  val compare_containment : Biocaml_range.t -> Biocaml_range.t -> int option
  val any_overlap : Biocaml_range.t list -> bool
  val all_positional : Biocaml_range.t list -> bool
  val max_gap_of_positional : Biocaml_range.t list -> int
  val find_min_range :
    ?init_direction:string ->
    Biocaml_range.t ->
    (Biocaml_range.t -> bool) -> int -> Biocaml_range.t option
  val expand_assoc_list : (Biocaml_range.t * 'a) list -> (int * 'a list) list
  val find_regions :
    ?max_gap:int ->
    ('-> bool) -> (Biocaml_range.t * 'a) list -> Biocaml_range.t list
  val make_random : Biocaml_range.t -> Biocaml_range.t
  val t_of_sexp : Sexplib.Sexp.t -> Biocaml_range.t
  val sexp_of_t : Biocaml_range.t -> Sexplib.Sexp.t
  val compare : Biocaml_range.t -> Biocaml_range.t -> int
end