12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576(** Module types for a [binary_search] function for a sequence, and functors for building
[binary_search] functions. *)open!Import(** An [Indexable] type is a finite sequence of elements indexed by consecutive integers
[0] ... [length t - 1]. [get] and [length] must be O(1) for the resulting
[binary_search] to be lg(n). *)moduletypeIndexable=sigtypeelttypetvalget:t->int->eltvallength:t->intendmoduletypeIndexable1=sigtype'atvalget:'at->int->'avallength:_t->intendtype('t,'elt,'key)binary_search=?pos:int->?len:int->'t->compare:('elt->'key->int)->[`Last_strictly_less_than(** {v | < elt X | v} *)|`Last_less_than_or_equal_to(** {v | <= elt X | v} *)|`Last_equal_to(** {v | = elt X | v} *)|`First_equal_to(** {v | X = elt | v} *)|`First_greater_than_or_equal_to(** {v | X >= elt | v} *)|`First_strictly_greater_than(** {v | X > elt | v} *)]->'key->intoptiontype('t,'elt)binary_search_segmented=?pos:int->?len:int->'t->segment_of:('elt->[`Left|`Right])->[`Last_on_left|`First_on_right]->intoptionmoduletypeS=sigtypeelttypet(** See [Binary_search.binary_search] in binary_search.ml *)valbinary_search:(t,elt,'key)binary_search(** See [Binary_search.binary_search_segmented] in binary_search.ml *)valbinary_search_segmented:(t,elt)binary_search_segmentedendmoduletypeS1=sigtype'atvalbinary_search:('at,'a,'key)binary_searchvalbinary_search_segmented:('at,'a)binary_search_segmentedendmoduletypeBinary_searchable=sigmoduletypeS=SmoduletypeS1=S1moduletypeIndexable=IndexablemoduletypeIndexable1=Indexable1typenonrec('t,'elt,'key)binary_search=('t,'elt,'key)binary_searchtypenonrec('t,'elt)binary_search_segmented=('t,'elt)binary_search_segmentedmoduleMake(T:Indexable):Swithtypet:=T.twithtypeelt:=T.eltmoduleMake1(T:Indexable1):S1withtype'at:='aT.tend