sig
  type comparison = int
  val cmp_fasc : ('-> 'comparable) -> '-> '-> comparison
  val cmp_fdesc : ('-> 'comparable) -> '-> '-> comparison
  val maxf : ('-> 'comparable) -> '-> '-> 'a
  val minf : ('-> 'comparable) -> '-> '-> 'a
  val in_order : 'a list -> cmp:('-> '-> comparison) -> bool
  val max_len : key:('-> string) -> 'a array -> int
  val bsearch : f:(int -> comparison) -> low:int -> high:int -> int option
  val bsearch_opt :
    f:(int -> comparison) -> low:int -> high:int -> int option
  val bsearch_exn : f:(int -> comparison) -> low:int -> high:int -> int
  type poly_comparison = [ `Good | `High | `Low ]
  val bsearch2 :
    f:(int -> poly_comparison) -> low:int -> high:int -> int option
  val bsearch2_opt :
    f:(int -> poly_comparison) -> low:int -> high:int -> int option
  val bsearch2_exn : f:(int -> poly_comparison) -> low:int -> high:int -> int
  val bsearch_val :
    f:(int -> comparison * 'a) -> low:int -> high:int -> (int * 'a) option
  val bsearch_val_opt :
    f:(int -> comparison * 'a) -> low:int -> high:int -> (int * 'a) option
  val bsearch_val_exn :
    f:(int -> comparison * 'a) -> low:int -> high:int -> int * 'a
end