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