functor (Str : STRING->
  sig
    type char_ = Str.char_
    type string_ = Str.t
    val edit_distance : string_ -> string_ -> int
    type automaton
    val of_string : limit:int -> string_ -> automaton
    val of_list : limit:int -> char_ list -> automaton
    val debug_print :
      (out_channel -> char_ -> unit) -> out_channel -> automaton -> unit
    val match_with : automaton -> string_ -> bool
    module Index :
      sig
        type 'b t
        val empty : 'b t
        val is_empty : 'a t -> bool
        val add : 'b t -> string_ -> '-> 'b t
        val cardinal : 'a t -> int
        val remove : 'b t -> string_ -> 'b t
        val retrieve : limit:int -> 'b t -> string_ -> 'b klist
        val of_list : (string_ * 'b) list -> 'b t
        val to_list : 'b t -> (string_ * 'b) list
        val add_seq : 'a t -> (string_ * 'a) sequence -> 'a t
        val of_seq : (string_ * 'a) sequence -> 'a t
        val to_seq : 'a t -> (string_ * 'a) sequence
        val add_gen : 'a t -> (string_ * 'a) gen -> 'a t
        val of_gen : (string_ * 'a) gen -> 'a t
        val to_gen : 'a t -> (string_ * 'a) gen
        val fold : ('-> string_ -> '-> 'a) -> '-> 'b t -> 'a
        val iter : (string_ -> '-> unit) -> 'b t -> unit
        val to_klist : 'b t -> (string_ * 'b) klist
      end
  end