type comparison = int
val cmp_fasc : ('a -> 'comparable) -> 'a -> 'a -> comparison
val cmp_fdesc : ('a -> 'comparable) -> 'a -> 'a -> comparison
val maxf : ('a -> 'comparable) -> 'a -> 'a -> 'a
val minf : ('a -> 'comparable) -> 'a -> 'a -> 'a
val in_order : 'a list -> cmp:('a -> 'a -> comparison) -> bool
val max_len : key:('a -> 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