sig
  module ConfigInt :
    sig
      module type Type =
        sig
          val datadir : string
          val charmapdir : string
          val unimapdir : string
          val localedir : string
        end
    end
  module OOChannel :
    sig
      class type ['a] obj_input_channel =
        object method close_in : unit -> unit method get : unit -> 'end
      class type ['a] obj_output_channel =
        object
          method close_out : unit -> unit
          method flush : unit -> unit
          method put : '-> unit
        end
      class ['a] channel_of_stream : 'Stream.t -> ['a] obj_input_channel
      val stream_of_channel :
        '#CamomileLibrary.OOChannel.obj_input_channel -> 'Stream.t
      class type char_input_channel =
        object
          method close_in : unit -> unit
          method input : string -> int -> int -> int
        end
      class type char_output_channel =
        object
          method close_out : unit -> unit
          method flush : unit -> unit
          method output : string -> int -> int -> int
        end
      class char_input_channel_of :
        char #CamomileLibrary.OOChannel.obj_input_channel ->
        char_input_channel
      class char_obj_input_channel_of :
        CamomileLibrary.OOChannel.char_input_channel ->
        [char] obj_input_channel
      class char_output_channel_of :
        char #CamomileLibrary.OOChannel.obj_output_channel ->
        char_output_channel
      class char_obj_output_channel_of :
        CamomileLibrary.OOChannel.char_output_channel ->
        [char] obj_output_channel
      class of_in_channel : Pervasives.in_channel -> char_input_channel
      class of_out_channel : Pervasives.out_channel -> char_output_channel
    end
  module UChar :
    sig
      type t
      exception Out_of_range
      val char_of : CamomileLibrary.UChar.t -> char
      val of_char : char -> CamomileLibrary.UChar.t
      val code : CamomileLibrary.UChar.t -> int
      val chr : int -> CamomileLibrary.UChar.t
      external uint_code : CamomileLibrary.UChar.t -> int = "%identity"
      val chr_of_uint : int -> CamomileLibrary.UChar.t
      val eq : CamomileLibrary.UChar.t -> CamomileLibrary.UChar.t -> bool
      val compare : CamomileLibrary.UChar.t -> CamomileLibrary.UChar.t -> int
      type uchar = CamomileLibrary.UChar.t
      val int_of : CamomileLibrary.UChar.uchar -> int
      val of_int : int -> CamomileLibrary.UChar.uchar
    end
  module USet :
    sig
      type t
      val empty : CamomileLibrary.USet.t
      val is_empty : CamomileLibrary.USet.t -> bool
      val mem : CamomileLibrary.UChar.t -> CamomileLibrary.USet.t -> bool
      val add :
        CamomileLibrary.UChar.t ->
        CamomileLibrary.USet.t -> CamomileLibrary.USet.t
      val add_range :
        CamomileLibrary.UChar.t ->
        CamomileLibrary.UChar.t ->
        CamomileLibrary.USet.t -> CamomileLibrary.USet.t
      val singleton : CamomileLibrary.UChar.t -> CamomileLibrary.USet.t
      val remove :
        CamomileLibrary.UChar.t ->
        CamomileLibrary.USet.t -> CamomileLibrary.USet.t
      val remove_range :
        CamomileLibrary.UChar.t ->
        CamomileLibrary.UChar.t ->
        CamomileLibrary.USet.t -> CamomileLibrary.USet.t
      val union :
        CamomileLibrary.USet.t ->
        CamomileLibrary.USet.t -> CamomileLibrary.USet.t
      val inter :
        CamomileLibrary.USet.t ->
        CamomileLibrary.USet.t -> CamomileLibrary.USet.t
      val diff :
        CamomileLibrary.USet.t ->
        CamomileLibrary.USet.t -> CamomileLibrary.USet.t
      val compl : CamomileLibrary.USet.t -> CamomileLibrary.USet.t
      val compare : CamomileLibrary.USet.t -> CamomileLibrary.USet.t -> int
      val equal : CamomileLibrary.USet.t -> CamomileLibrary.USet.t -> bool
      val subset : CamomileLibrary.USet.t -> CamomileLibrary.USet.t -> bool
      val from :
        CamomileLibrary.UChar.t ->
        CamomileLibrary.USet.t -> CamomileLibrary.USet.t
      val after :
        CamomileLibrary.UChar.t ->
        CamomileLibrary.USet.t -> CamomileLibrary.USet.t
      val until :
        CamomileLibrary.UChar.t ->
        CamomileLibrary.USet.t -> CamomileLibrary.USet.t
      val before :
        CamomileLibrary.UChar.t ->
        CamomileLibrary.USet.t -> CamomileLibrary.USet.t
      val iter :
        (CamomileLibrary.UChar.t -> unit) -> CamomileLibrary.USet.t -> unit
      val iter_range :
        (CamomileLibrary.UChar.t -> CamomileLibrary.UChar.t -> unit) ->
        CamomileLibrary.USet.t -> unit
      val fold :
        (CamomileLibrary.UChar.t -> '-> 'a) ->
        CamomileLibrary.USet.t -> '-> 'a
      val fold_range :
        (CamomileLibrary.UChar.t -> CamomileLibrary.UChar.t -> '-> 'a) ->
        CamomileLibrary.USet.t -> '-> 'a
      val for_all :
        (CamomileLibrary.UChar.t -> bool) -> CamomileLibrary.USet.t -> bool
      val exists :
        (CamomileLibrary.UChar.t -> bool) -> CamomileLibrary.USet.t -> bool
      val filter :
        (CamomileLibrary.UChar.t -> bool) ->
        CamomileLibrary.USet.t -> CamomileLibrary.USet.t
      val partition :
        (CamomileLibrary.UChar.t -> bool) ->
        CamomileLibrary.USet.t ->
        CamomileLibrary.USet.t * CamomileLibrary.USet.t
      val cardinal : CamomileLibrary.USet.t -> int
      val elements : CamomileLibrary.USet.t -> CamomileLibrary.UChar.t list
      val ranges :
        CamomileLibrary.USet.t ->
        (CamomileLibrary.UChar.t * CamomileLibrary.UChar.t) list
      val min_elt : CamomileLibrary.USet.t -> CamomileLibrary.UChar.t
      val max_elt : CamomileLibrary.USet.t -> CamomileLibrary.UChar.t
      val choose : CamomileLibrary.USet.t -> CamomileLibrary.UChar.t
      val uset_of_iset : ISet.t -> CamomileLibrary.USet.t
      val iset_of_uset : CamomileLibrary.USet.t -> ISet.t
    end
  module UMap :
    sig
      type 'a t
      val empty : 'CamomileLibrary.UMap.t
      val is_empty : 'CamomileLibrary.UMap.t -> bool
      val add :
        ?eq:('-> '-> bool) ->
        CamomileLibrary.UChar.t ->
        '-> 'CamomileLibrary.UMap.t -> 'CamomileLibrary.UMap.t
      val add_range :
        ?eq:('-> '-> bool) ->
        CamomileLibrary.UChar.t ->
        CamomileLibrary.UChar.t ->
        '-> 'CamomileLibrary.UMap.t -> 'CamomileLibrary.UMap.t
      val find : CamomileLibrary.UChar.t -> 'CamomileLibrary.UMap.t -> 'a
      val remove :
        CamomileLibrary.UChar.t ->
        'CamomileLibrary.UMap.t -> 'CamomileLibrary.UMap.t
      val remove_range :
        CamomileLibrary.UChar.t ->
        CamomileLibrary.UChar.t ->
        'CamomileLibrary.UMap.t -> 'CamomileLibrary.UMap.t
      val from :
        CamomileLibrary.UChar.t ->
        'CamomileLibrary.UMap.t -> 'CamomileLibrary.UMap.t
      val after :
        CamomileLibrary.UChar.t ->
        'CamomileLibrary.UMap.t -> 'CamomileLibrary.UMap.t
      val until :
        CamomileLibrary.UChar.t ->
        'CamomileLibrary.UMap.t -> 'CamomileLibrary.UMap.t
      val before :
        CamomileLibrary.UChar.t ->
        'CamomileLibrary.UMap.t -> 'CamomileLibrary.UMap.t
      val mem : CamomileLibrary.UChar.t -> 'CamomileLibrary.UMap.t -> bool
      val iter :
        (CamomileLibrary.UChar.t -> '-> unit) ->
        'CamomileLibrary.UMap.t -> unit
      val iter_range :
        (CamomileLibrary.UChar.t -> CamomileLibrary.UChar.t -> '-> unit) ->
        'CamomileLibrary.UMap.t -> unit
      val map :
        ?eq:('-> '-> bool) ->
        ('-> 'a) -> 'CamomileLibrary.UMap.t -> 'CamomileLibrary.UMap.t
      val mapi :
        ?eq:('-> '-> bool) ->
        (CamomileLibrary.UChar.t -> '-> 'a) ->
        'CamomileLibrary.UMap.t -> 'CamomileLibrary.UMap.t
      val fold :
        (CamomileLibrary.UChar.t -> '-> '-> 'b) ->
        'CamomileLibrary.UMap.t -> '-> 'b
      val fold_range :
        (CamomileLibrary.UChar.t -> CamomileLibrary.UChar.t -> '-> '-> 'b) ->
        'CamomileLibrary.UMap.t -> '-> 'b
      val set_to_map :
        CamomileLibrary.USet.t -> '-> 'CamomileLibrary.UMap.t
      val domain : 'CamomileLibrary.UMap.t -> CamomileLibrary.USet.t
      val map_to_set :
        ('-> bool) -> 'CamomileLibrary.UMap.t -> CamomileLibrary.USet.t
      val umap_of_imap : 'IMap.t -> 'CamomileLibrary.UMap.t
      val imap_of_umap : 'CamomileLibrary.UMap.t -> 'IMap.t
    end
  module UCharTbl :
    sig
      type 'a tbl
      type 'a t = 'CamomileLibrary.UCharTbl.tbl
      val get :
        'CamomileLibrary.UCharTbl.tbl -> CamomileLibrary.UChar.t -> 'a
      module type Type =
        sig
          type elt
          type t =
              CamomileLibrary.UCharTbl.Type.elt CamomileLibrary.UCharTbl.tbl
          val get :
            CamomileLibrary.UCharTbl.Type.elt CamomileLibrary.UCharTbl.tbl ->
            CamomileLibrary.UChar.t -> CamomileLibrary.UCharTbl.Type.elt
          val of_map :
            CamomileLibrary.UCharTbl.Type.elt ->
            CamomileLibrary.UCharTbl.Type.elt CamomileLibrary.UMap.t ->
            CamomileLibrary.UCharTbl.Type.t
        end
      module Make :
        functor (H : Hashtbl.HashedType->
          sig
            type elt = H.t
            type t = elt tbl
            val get : elt tbl -> UChar.t -> elt
            val of_map : elt -> elt UMap.t -> t
          end
      module Bool :
        sig
          type t
          val get :
            CamomileLibrary.UCharTbl.Bool.t ->
            CamomileLibrary.UChar.t -> bool
          val of_set :
            CamomileLibrary.USet.t -> CamomileLibrary.UCharTbl.Bool.t
        end
      module Bits :
        sig
          type t
          val of_map :
            int ->
            int CamomileLibrary.UMap.t -> CamomileLibrary.UCharTbl.Bits.t
          val get :
            CamomileLibrary.UCharTbl.Bits.t -> CamomileLibrary.UChar.t -> int
        end
      module Bytes :
        sig
          type t
          val of_map :
            int ->
            int CamomileLibrary.UMap.t -> CamomileLibrary.UCharTbl.Bytes.t
          val get :
            CamomileLibrary.UCharTbl.Bytes.t ->
            CamomileLibrary.UChar.t -> int
        end
      module Char :
        sig
          type t
          val of_map :
            char ->
            char CamomileLibrary.UMap.t -> CamomileLibrary.UCharTbl.Char.t
          val get :
            CamomileLibrary.UCharTbl.Char.t ->
            CamomileLibrary.UChar.t -> char
        end
    end
  module UnicodeString :
    sig
      module type Type =
        sig
          type t
          val get :
            CamomileLibrary.UnicodeString.Type.t ->
            int -> CamomileLibrary.UChar.t
          val init :
            int ->
            (int -> CamomileLibrary.UChar.t) ->
            CamomileLibrary.UnicodeString.Type.t
          val length : CamomileLibrary.UnicodeString.Type.t -> int
          type index
          val look :
            CamomileLibrary.UnicodeString.Type.t ->
            CamomileLibrary.UnicodeString.Type.index ->
            CamomileLibrary.UChar.t
          val nth :
            CamomileLibrary.UnicodeString.Type.t ->
            int -> CamomileLibrary.UnicodeString.Type.index
          val next :
            CamomileLibrary.UnicodeString.Type.t ->
            CamomileLibrary.UnicodeString.Type.index ->
            CamomileLibrary.UnicodeString.Type.index
          val prev :
            CamomileLibrary.UnicodeString.Type.t ->
            CamomileLibrary.UnicodeString.Type.index ->
            CamomileLibrary.UnicodeString.Type.index
          val out_of_range :
            CamomileLibrary.UnicodeString.Type.t ->
            CamomileLibrary.UnicodeString.Type.index -> bool
          val iter :
            (CamomileLibrary.UChar.t -> unit) ->
            CamomileLibrary.UnicodeString.Type.t -> unit
          val compare :
            CamomileLibrary.UnicodeString.Type.t ->
            CamomileLibrary.UnicodeString.Type.t -> int
          val first :
            CamomileLibrary.UnicodeString.Type.t ->
            CamomileLibrary.UnicodeString.Type.index
          val last :
            CamomileLibrary.UnicodeString.Type.t ->
            CamomileLibrary.UnicodeString.Type.index
          val move :
            CamomileLibrary.UnicodeString.Type.t ->
            CamomileLibrary.UnicodeString.Type.index ->
            int -> CamomileLibrary.UnicodeString.Type.index
          val compare_index :
            CamomileLibrary.UnicodeString.Type.t ->
            CamomileLibrary.UnicodeString.Type.index ->
            CamomileLibrary.UnicodeString.Type.index -> int
          module Buf :
            sig
              type buf
              val create : int -> CamomileLibrary.UnicodeString.Type.Buf.buf
              val contents :
                CamomileLibrary.UnicodeString.Type.Buf.buf ->
                CamomileLibrary.UnicodeString.Type.t
              val clear : CamomileLibrary.UnicodeString.Type.Buf.buf -> unit
              val reset : CamomileLibrary.UnicodeString.Type.Buf.buf -> unit
              val add_char :
                CamomileLibrary.UnicodeString.Type.Buf.buf ->
                CamomileLibrary.UChar.t -> unit
              val add_string :
                CamomileLibrary.UnicodeString.Type.Buf.buf ->
                CamomileLibrary.UnicodeString.Type.t -> unit
              val add_buffer :
                CamomileLibrary.UnicodeString.Type.Buf.buf ->
                CamomileLibrary.UnicodeString.Type.Buf.buf -> unit
            end
        end
    end
  module UText :
    sig
      type mutability = [ `Immutable | `Mutable ]
      type 'a text
      type utext = [ `Immutable ] CamomileLibrary.UText.text
      type ustring = [ `Mutable ] CamomileLibrary.UText.text
      type t = CamomileLibrary.UText.utext
      val utext_of_ustring :
        CamomileLibrary.UText.ustring -> CamomileLibrary.UText.utext
      val ustring_of_utext :
        CamomileLibrary.UText.utext -> CamomileLibrary.UText.ustring
      val get :
        'CamomileLibrary.UText.text -> int -> CamomileLibrary.UChar.t
      val set :
        CamomileLibrary.UText.ustring ->
        int -> CamomileLibrary.UChar.t -> unit
      type index
      val look :
        'CamomileLibrary.UText.text ->
        CamomileLibrary.UText.index -> CamomileLibrary.UChar.t
      val nth :
        'CamomileLibrary.UText.text -> int -> CamomileLibrary.UText.index
      val first :
        'CamomileLibrary.UText.text -> CamomileLibrary.UText.index
      val last : 'CamomileLibrary.UText.text -> CamomileLibrary.UText.index
      val out_of_range :
        'CamomileLibrary.UText.text -> CamomileLibrary.UText.index -> bool
      val compare_index :
        'CamomileLibrary.UText.text ->
        CamomileLibrary.UText.index -> CamomileLibrary.UText.index -> int
      val next :
        'CamomileLibrary.UText.text ->
        CamomileLibrary.UText.index -> CamomileLibrary.UText.index
      val prev :
        'CamomileLibrary.UText.text ->
        CamomileLibrary.UText.index -> CamomileLibrary.UText.index
      val move :
        'CamomileLibrary.UText.text ->
        CamomileLibrary.UText.index -> int -> CamomileLibrary.UText.index
      val length : 'CamomileLibrary.UText.text -> int
      val of_string : string -> CamomileLibrary.UText.utext
      val init :
        int ->
        (int -> CamomileLibrary.UChar.t) -> CamomileLibrary.UText.utext
      val init_ustring :
        int ->
        (int -> CamomileLibrary.UChar.t) -> CamomileLibrary.UText.ustring
      val make :
        int -> CamomileLibrary.UChar.t -> CamomileLibrary.UText.ustring
      val copy :
        CamomileLibrary.UText.ustring -> CamomileLibrary.UText.ustring
      val sub :
        'CamomileLibrary.UText.text ->
        int -> int -> 'CamomileLibrary.UText.text
      val fill :
        CamomileLibrary.UText.ustring ->
        int -> int -> CamomileLibrary.UChar.t -> unit
      val blit :
        'CamomileLibrary.UText.text ->
        int -> CamomileLibrary.UText.ustring -> int -> int -> unit
      val append :
        'CamomileLibrary.UText.text ->
        'CamomileLibrary.UText.text -> 'CamomileLibrary.UText.text
      val iter :
        (CamomileLibrary.UChar.t -> unit) ->
        'CamomileLibrary.UText.text -> unit
      val compare :
        'CamomileLibrary.UText.text -> 'CamomileLibrary.UText.text -> int
      module Buf :
        sig
          type buf
          val create : int -> CamomileLibrary.UText.Buf.buf
          val contents :
            CamomileLibrary.UText.Buf.buf -> CamomileLibrary.UText.t
          val contents_string :
            CamomileLibrary.UText.Buf.buf -> CamomileLibrary.UText.ustring
          val length : CamomileLibrary.UText.Buf.buf -> int
          val clear : CamomileLibrary.UText.Buf.buf -> unit
          val reset : CamomileLibrary.UText.Buf.buf -> unit
          val add_char :
            CamomileLibrary.UText.Buf.buf -> CamomileLibrary.UChar.t -> unit
          val add_string :
            CamomileLibrary.UText.Buf.buf ->
            'CamomileLibrary.UText.text -> unit
          val add_buffer :
            CamomileLibrary.UText.Buf.buf ->
            CamomileLibrary.UText.Buf.buf -> unit
        end
    end
  module XString :
    sig
      type xstring
      type t = CamomileLibrary.XString.xstring
      val get :
        CamomileLibrary.XString.xstring -> int -> CamomileLibrary.UChar.t
      val set :
        CamomileLibrary.XString.xstring ->
        int -> CamomileLibrary.UChar.t -> unit
      val length : CamomileLibrary.XString.xstring -> int
      val init :
        int ->
        (int -> CamomileLibrary.UChar.t) -> CamomileLibrary.XString.xstring
      type index
      val look :
        CamomileLibrary.XString.xstring ->
        CamomileLibrary.XString.index -> CamomileLibrary.UChar.t
      val nth :
        CamomileLibrary.XString.xstring ->
        int -> CamomileLibrary.XString.index
      val first :
        CamomileLibrary.XString.xstring -> CamomileLibrary.XString.index
      val last :
        CamomileLibrary.XString.xstring -> CamomileLibrary.XString.index
      val out_of_range :
        CamomileLibrary.XString.xstring ->
        CamomileLibrary.XString.index -> bool
      val next :
        CamomileLibrary.XString.xstring ->
        CamomileLibrary.XString.index -> CamomileLibrary.XString.index
      val prev :
        CamomileLibrary.XString.xstring ->
        CamomileLibrary.XString.index -> CamomileLibrary.XString.index
      val move :
        CamomileLibrary.XString.xstring ->
        CamomileLibrary.XString.index -> int -> CamomileLibrary.XString.index
      val compare_index :
        CamomileLibrary.XString.xstring ->
        CamomileLibrary.XString.index -> CamomileLibrary.XString.index -> int
      val make :
        ?bufsize:int ->
        int -> CamomileLibrary.UChar.t -> CamomileLibrary.XString.xstring
      val clear : CamomileLibrary.XString.xstring -> unit
      val reset : CamomileLibrary.XString.xstring -> unit
      val copy :
        CamomileLibrary.XString.xstring -> CamomileLibrary.XString.xstring
      val sub :
        CamomileLibrary.XString.xstring ->
        int -> int -> CamomileLibrary.XString.xstring
      val add_char :
        CamomileLibrary.XString.xstring -> CamomileLibrary.UChar.t -> unit
      val add_text :
        CamomileLibrary.XString.xstring ->
        'CamomileLibrary.UText.text -> unit
      val add_xstring :
        CamomileLibrary.XString.xstring ->
        CamomileLibrary.XString.xstring -> unit
      val shrink : CamomileLibrary.XString.xstring -> int -> unit
      val append :
        CamomileLibrary.XString.xstring ->
        CamomileLibrary.XString.xstring -> CamomileLibrary.XString.xstring
      val utext_of :
        CamomileLibrary.XString.xstring -> CamomileLibrary.UText.t
      val ustring_of :
        CamomileLibrary.XString.xstring -> CamomileLibrary.UText.ustring
      val iter :
        (CamomileLibrary.UChar.t -> unit) ->
        CamomileLibrary.XString.xstring -> unit
      val compare :
        CamomileLibrary.XString.t -> CamomileLibrary.XString.t -> int
      module Buf :
        sig
          type buf
          val create : int -> CamomileLibrary.XString.Buf.buf
          val contents :
            CamomileLibrary.XString.Buf.buf -> CamomileLibrary.XString.t
          val length : CamomileLibrary.XString.Buf.buf -> int
          val clear : CamomileLibrary.XString.Buf.buf -> unit
          val reset : CamomileLibrary.XString.Buf.buf -> unit
          val add_char :
            CamomileLibrary.XString.Buf.buf ->
            CamomileLibrary.UChar.t -> unit
          val add_string :
            CamomileLibrary.XString.Buf.buf ->
            CamomileLibrary.XString.t -> unit
          val add_buffer :
            CamomileLibrary.XString.Buf.buf ->
            CamomileLibrary.XString.Buf.buf -> unit
        end
    end
  module SubText :
    sig
      module type Type =
        sig
          type t
          val get :
            CamomileLibrary.SubText.Type.t -> int -> CamomileLibrary.UChar.t
          val init :
            int ->
            (int -> CamomileLibrary.UChar.t) ->
            CamomileLibrary.SubText.Type.t
          val length : CamomileLibrary.SubText.Type.t -> int
          type index
          val look :
            CamomileLibrary.SubText.Type.t ->
            CamomileLibrary.SubText.Type.index -> CamomileLibrary.UChar.t
          val nth :
            CamomileLibrary.SubText.Type.t ->
            int -> CamomileLibrary.SubText.Type.index
          val first :
            CamomileLibrary.SubText.Type.t ->
            CamomileLibrary.SubText.Type.index
          val last :
            CamomileLibrary.SubText.Type.t ->
            CamomileLibrary.SubText.Type.index
          val next :
            CamomileLibrary.SubText.Type.t ->
            CamomileLibrary.SubText.Type.index ->
            CamomileLibrary.SubText.Type.index
          val prev :
            CamomileLibrary.SubText.Type.t ->
            CamomileLibrary.SubText.Type.index ->
            CamomileLibrary.SubText.Type.index
          val move :
            CamomileLibrary.SubText.Type.t ->
            CamomileLibrary.SubText.Type.index ->
            int -> CamomileLibrary.SubText.Type.index
          val out_of_range :
            CamomileLibrary.SubText.Type.t ->
            CamomileLibrary.SubText.Type.index -> bool
          val compare_index :
            CamomileLibrary.SubText.Type.t ->
            CamomileLibrary.SubText.Type.index ->
            CamomileLibrary.SubText.Type.index -> int
          val iter :
            (CamomileLibrary.UChar.t -> unit) ->
            CamomileLibrary.SubText.Type.t -> unit
          val compare :
            CamomileLibrary.SubText.Type.t ->
            CamomileLibrary.SubText.Type.t -> int
          module Buf :
            sig
              type buf
              val create : int -> CamomileLibrary.SubText.Type.Buf.buf
              val contents :
                CamomileLibrary.SubText.Type.Buf.buf ->
                CamomileLibrary.SubText.Type.t
              val clear : CamomileLibrary.SubText.Type.Buf.buf -> unit
              val reset : CamomileLibrary.SubText.Type.Buf.buf -> unit
              val add_char :
                CamomileLibrary.SubText.Type.Buf.buf ->
                CamomileLibrary.UChar.t -> unit
              val add_string :
                CamomileLibrary.SubText.Type.Buf.buf ->
                CamomileLibrary.SubText.Type.t -> unit
              val add_buffer :
                CamomileLibrary.SubText.Type.Buf.buf ->
                CamomileLibrary.SubText.Type.Buf.buf -> unit
            end
          type ur_text
          type ur_index
          val refer :
            CamomileLibrary.SubText.Type.ur_text ->
            CamomileLibrary.SubText.Type.ur_index ->
            CamomileLibrary.SubText.Type.ur_index ->
            CamomileLibrary.SubText.Type.t
          val excerpt :
            CamomileLibrary.SubText.Type.t ->
            CamomileLibrary.SubText.Type.ur_text
          val context :
            CamomileLibrary.SubText.Type.t ->
            CamomileLibrary.SubText.Type.ur_text *
            CamomileLibrary.SubText.Type.ur_index *
            CamomileLibrary.SubText.Type.ur_index
          val ur_index_of :
            CamomileLibrary.SubText.Type.t ->
            CamomileLibrary.SubText.Type.index ->
            CamomileLibrary.SubText.Type.ur_index
        end
      module Make :
        functor (Text : UnicodeString.Type->
          sig
            type t
            val get : t -> int -> UChar.t
            val init : int -> (int -> UChar.t) -> t
            val length : t -> int
            type index
            val look : t -> index -> UChar.t
            val nth : t -> int -> index
            val first : t -> index
            val last : t -> index
            val next : t -> index -> index
            val prev : t -> index -> index
            val move : t -> index -> int -> index
            val out_of_range : t -> index -> bool
            val compare_index : t -> index -> index -> int
            val iter : (UChar.t -> unit) -> t -> unit
            val compare : t -> t -> int
            module Buf :
              sig
                type buf
                val create : int -> buf
                val contents : buf -> t
                val clear : buf -> unit
                val reset : buf -> unit
                val add_char : buf -> UChar.t -> unit
                val add_string : buf -> t -> unit
                val add_buffer : buf -> buf -> unit
              end
            type ur_text = Text.t
            type ur_index = Text.index
            val refer : ur_text -> ur_index -> ur_index -> t
            val excerpt : t -> ur_text
            val context : t -> ur_text * ur_index * ur_index
            val ur_index_of : t -> index -> ur_index
          end
    end
  module ULine :
    sig
      type separator = [ `CR | `CRLF | `LF | `LS | `NEL | `PS ]
      class input :
        CamomileLibrary.ULine.separator ->
        CamomileLibrary.UChar.t #CamomileLibrary.OOChannel.obj_input_channel ->
        [CamomileLibrary.UChar.t] OOChannel.obj_input_channel
      class output :
        CamomileLibrary.ULine.separator ->
        CamomileLibrary.UChar.t #CamomileLibrary.OOChannel.obj_output_channel ->
        [CamomileLibrary.UChar.t] OOChannel.obj_output_channel
      module type Type =
        sig
          type text
          class input_line :
            CamomileLibrary.UChar.t
            #CamomileLibrary.OOChannel.obj_input_channel ->
            [CamomileLibrary.ULine.Type.text] OOChannel.obj_input_channel
          class output_line :
            ?sp:CamomileLibrary.ULine.separator ->
            CamomileLibrary.UChar.t
            #CamomileLibrary.OOChannel.obj_output_channel ->
            [CamomileLibrary.ULine.Type.text] OOChannel.obj_output_channel
        end
      module Make :
        functor (Text : UnicodeString.Type->
          sig
            type text = Text.t
            class input_line :
              UChar.t #OOChannel.obj_input_channel ->
              [text] OOChannel.obj_input_channel
            class output_line :
              ?sp:separator ->
              UChar.t #OOChannel.obj_output_channel ->
              [text] OOChannel.obj_output_channel
          end
    end
  module Locale :
    sig
      type t = string
      val read :
        string -> string -> (Pervasives.in_channel -> 'a) -> string -> 'a
      val contain : string -> string -> bool
    end
  module UTF8 :
    sig
      type t = string
      exception Malformed_code
      val validate : CamomileLibrary.UTF8.t -> unit
      val get : CamomileLibrary.UTF8.t -> int -> CamomileLibrary.UChar.t
      val init :
        int -> (int -> CamomileLibrary.UChar.t) -> CamomileLibrary.UTF8.t
      val length : CamomileLibrary.UTF8.t -> int
      type index = int
      val nth : CamomileLibrary.UTF8.t -> int -> CamomileLibrary.UTF8.index
      val first : CamomileLibrary.UTF8.t -> CamomileLibrary.UTF8.index
      val last : CamomileLibrary.UTF8.t -> CamomileLibrary.UTF8.index
      val look :
        CamomileLibrary.UTF8.t ->
        CamomileLibrary.UTF8.index -> CamomileLibrary.UChar.t
      val out_of_range :
        CamomileLibrary.UTF8.t -> CamomileLibrary.UTF8.index -> bool
      val compare_index :
        CamomileLibrary.UTF8.t ->
        CamomileLibrary.UTF8.index -> CamomileLibrary.UTF8.index -> int
      val next :
        CamomileLibrary.UTF8.t ->
        CamomileLibrary.UTF8.index -> CamomileLibrary.UTF8.index
      val prev :
        CamomileLibrary.UTF8.t ->
        CamomileLibrary.UTF8.index -> CamomileLibrary.UTF8.index
      val move :
        CamomileLibrary.UTF8.t ->
        CamomileLibrary.UTF8.index -> int -> CamomileLibrary.UTF8.index
      val iter :
        (CamomileLibrary.UChar.t -> unit) -> CamomileLibrary.UTF8.t -> unit
      val compare : CamomileLibrary.UTF8.t -> CamomileLibrary.UTF8.t -> int
      module Buf :
        sig
          type buf = Buffer.t
          val create : int -> CamomileLibrary.UTF8.Buf.buf
          val contents :
            CamomileLibrary.UTF8.Buf.buf -> CamomileLibrary.UTF8.t
          val clear : CamomileLibrary.UTF8.Buf.buf -> unit
          val reset : CamomileLibrary.UTF8.Buf.buf -> unit
          val add_char :
            CamomileLibrary.UTF8.Buf.buf -> CamomileLibrary.UChar.t -> unit
          val add_string :
            CamomileLibrary.UTF8.Buf.buf -> CamomileLibrary.UTF8.t -> unit
          val add_buffer :
            CamomileLibrary.UTF8.Buf.buf ->
            CamomileLibrary.UTF8.Buf.buf -> unit
        end
    end
  module UTF16 :
    sig
      type t =
          (int, Bigarray.int16_unsigned_elt, Bigarray.c_layout)
          Bigarray.Array1.t
      exception Malformed_code
      val validate : CamomileLibrary.UTF16.t -> unit
      val get : CamomileLibrary.UTF16.t -> int -> CamomileLibrary.UChar.t
      exception Out_of_range
      val init :
        int -> (int -> CamomileLibrary.UChar.t) -> CamomileLibrary.UTF16.t
      val length : CamomileLibrary.UTF16.t -> int
      type index = int
      val nth : CamomileLibrary.UTF16.t -> int -> CamomileLibrary.UTF16.index
      val first : CamomileLibrary.UTF16.t -> CamomileLibrary.UTF16.index
      val last : CamomileLibrary.UTF16.t -> CamomileLibrary.UTF16.index
      val look :
        CamomileLibrary.UTF16.t ->
        CamomileLibrary.UTF16.index -> CamomileLibrary.UChar.t
      val out_of_range :
        CamomileLibrary.UTF16.t -> CamomileLibrary.UTF16.index -> bool
      val compare_index :
        CamomileLibrary.UTF16.t ->
        CamomileLibrary.UTF16.index -> CamomileLibrary.UTF16.index -> int
      val next :
        CamomileLibrary.UTF16.t ->
        CamomileLibrary.UTF16.index -> CamomileLibrary.UTF16.index
      val prev :
        CamomileLibrary.UTF16.t ->
        CamomileLibrary.UTF16.index -> CamomileLibrary.UTF16.index
      val move :
        CamomileLibrary.UTF16.t ->
        CamomileLibrary.UTF16.index -> int -> CamomileLibrary.UTF16.index
      val iter :
        (CamomileLibrary.UChar.t -> unit) -> CamomileLibrary.UTF16.t -> unit
      val compare : CamomileLibrary.UTF16.t -> CamomileLibrary.UTF16.t -> int
      module Buf :
        sig
          type buf
          val create : int -> CamomileLibrary.UTF16.Buf.buf
          val contents :
            CamomileLibrary.UTF16.Buf.buf -> CamomileLibrary.UTF16.t
          val clear : CamomileLibrary.UTF16.Buf.buf -> unit
          val reset : CamomileLibrary.UTF16.Buf.buf -> unit
          val add_char :
            CamomileLibrary.UTF16.Buf.buf -> CamomileLibrary.UChar.t -> unit
          val add_string :
            CamomileLibrary.UTF16.Buf.buf -> CamomileLibrary.UTF16.t -> unit
          val add_buffer :
            CamomileLibrary.UTF16.Buf.buf ->
            CamomileLibrary.UTF16.Buf.buf -> unit
        end
    end
  module UCS4 :
    sig
      type t =
          (int32, Bigarray.int32_elt, Bigarray.c_layout) Bigarray.Array1.t
      exception Malformed_code
      val validate : CamomileLibrary.UCS4.t -> unit
      val get : CamomileLibrary.UCS4.t -> int -> CamomileLibrary.UChar.t
      val init :
        int -> (int -> CamomileLibrary.UChar.t) -> CamomileLibrary.UCS4.t
      val length : CamomileLibrary.UCS4.t -> int
      type index = int
      val nth : CamomileLibrary.UCS4.t -> int -> CamomileLibrary.UCS4.index
      val first : CamomileLibrary.UCS4.t -> CamomileLibrary.UCS4.index
      val last : CamomileLibrary.UCS4.t -> CamomileLibrary.UCS4.index
      val look :
        CamomileLibrary.UCS4.t ->
        CamomileLibrary.UCS4.index -> CamomileLibrary.UChar.t
      val out_of_range :
        CamomileLibrary.UCS4.t -> CamomileLibrary.UCS4.index -> bool
      val compare_index :
        CamomileLibrary.UCS4.t ->
        CamomileLibrary.UCS4.index -> CamomileLibrary.UCS4.index -> int
      val next :
        CamomileLibrary.UCS4.t ->
        CamomileLibrary.UCS4.index -> CamomileLibrary.UCS4.index
      val prev :
        CamomileLibrary.UCS4.t ->
        CamomileLibrary.UCS4.index -> CamomileLibrary.UCS4.index
      val move :
        CamomileLibrary.UCS4.t ->
        CamomileLibrary.UCS4.index -> int -> CamomileLibrary.UCS4.index
      val iter :
        (CamomileLibrary.UChar.t -> unit) -> CamomileLibrary.UCS4.t -> unit
      val compare : CamomileLibrary.UCS4.t -> CamomileLibrary.UCS4.t -> int
      module Buf :
        sig
          type buf
          val create : int -> CamomileLibrary.UCS4.Buf.buf
          val contents :
            CamomileLibrary.UCS4.Buf.buf -> CamomileLibrary.UCS4.t
          val clear : CamomileLibrary.UCS4.Buf.buf -> unit
          val reset : CamomileLibrary.UCS4.Buf.buf -> unit
          val add_char :
            CamomileLibrary.UCS4.Buf.buf -> CamomileLibrary.UChar.t -> unit
          val add_string :
            CamomileLibrary.UCS4.Buf.buf -> CamomileLibrary.UCS4.t -> unit
          val add_buffer :
            CamomileLibrary.UCS4.Buf.buf ->
            CamomileLibrary.UCS4.Buf.buf -> unit
        end
    end
  module UPervasives :
    sig
      type uchar = CamomileLibrary.UChar.t
      val int_of_uchar : CamomileLibrary.UPervasives.uchar -> int
      val uchar_of_int : int -> CamomileLibrary.UPervasives.uchar
      val escaped_uchar : CamomileLibrary.UPervasives.uchar -> string
      val escaped_utf8 : string -> string
      val printer_utf8 : Format.formatter -> string -> unit
      val printer_uchar :
        Format.formatter -> CamomileLibrary.UPervasives.uchar -> unit
    end
  module URe :
    sig
      type regexp =
          [ `After of CamomileLibrary.URe.regexp
          | `Alt of CamomileLibrary.URe.regexp * CamomileLibrary.URe.regexp
          | `Before of CamomileLibrary.URe.regexp
          | `BoS
          | `EoS
          | `Epsilon
          | `Group of CamomileLibrary.URe.regexp
          | `OneChar
          | `Rep of CamomileLibrary.URe.regexp
          | `Repn of CamomileLibrary.URe.regexp * int * int option
          | `Seq of CamomileLibrary.URe.regexp * CamomileLibrary.URe.regexp
          | `Set of CamomileLibrary.USet.t
          | `String of CamomileLibrary.UChar.t list ]
      type match_semantics = [ `First | `Longest | `Shortest ]
      val no_group : CamomileLibrary.URe.regexp -> CamomileLibrary.URe.regexp
      module type Type =
        sig
          type text
          type index
          type compiled_regexp
          module SubText :
            sig
              type t
              val get : t -> int -> UChar.t
              val init : int -> (int -> UChar.t) -> t
              val length : t -> int
              type index
              val look : t -> index -> UChar.t
              val nth : t -> int -> index
              val first : t -> index
              val last : t -> index
              val next : t -> index -> index
              val prev : t -> index -> index
              val move : t -> index -> int -> index
              val out_of_range : t -> index -> bool
              val compare_index : t -> index -> index -> int
              val iter : (UChar.t -> unit) -> t -> unit
              val compare : t -> t -> int
              module Buf :
                sig
                  type buf
                  val create : int -> buf
                  val contents : buf -> t
                  val clear : buf -> unit
                  val reset : buf -> unit
                  val add_char : buf -> UChar.t -> unit
                  val add_string : buf -> t -> unit
                  val add_buffer : buf -> buf -> unit
                end
              type ur_text = text
              type ur_index = index
              val refer : ur_text -> ur_index -> ur_index -> t
              val excerpt : t -> ur_text
              val context : t -> ur_text * ur_index * ur_index
              val ur_index_of : t -> index -> ur_index
            end
          val compile :
            CamomileLibrary.URe.regexp ->
            CamomileLibrary.URe.Type.compiled_regexp
          val regexp_match :
            ?sem:CamomileLibrary.URe.match_semantics ->
            CamomileLibrary.URe.Type.compiled_regexp ->
            CamomileLibrary.URe.Type.text ->
            CamomileLibrary.URe.Type.index ->
            CamomileLibrary.URe.Type.SubText.t option array option
          val string_match :
            CamomileLibrary.URe.Type.compiled_regexp ->
            CamomileLibrary.URe.Type.text ->
            CamomileLibrary.URe.Type.index -> bool
          val search_forward :
            ?sem:CamomileLibrary.URe.match_semantics ->
            CamomileLibrary.URe.Type.compiled_regexp ->
            CamomileLibrary.URe.Type.text ->
            CamomileLibrary.URe.Type.index ->
            CamomileLibrary.URe.Type.SubText.t option array option
        end
      module Make :
        functor (Text : UnicodeString.Type->
          sig
            type text = Text.t
            type index = Text.index
            type compiled_regexp
            module SubText :
              sig
                type t
                val get : t -> int -> UChar.t
                val init : int -> (int -> UChar.t) -> t
                val length : t -> int
                type index
                val look : t -> index -> UChar.t
                val nth : t -> int -> index
                val first : t -> index
                val last : t -> index
                val next : t -> index -> index
                val prev : t -> index -> index
                val move : t -> index -> int -> index
                val out_of_range : t -> index -> bool
                val compare_index : t -> index -> index -> int
                val iter : (UChar.t -> unit) -> t -> unit
                val compare : t -> t -> int
                module Buf :
                  sig
                    type buf
                    val create : int -> buf
                    val contents : buf -> t
                    val clear : buf -> unit
                    val reset : buf -> unit
                    val add_char : buf -> UChar.t -> unit
                    val add_string : buf -> t -> unit
                    val add_buffer : buf -> buf -> unit
                  end
                type ur_text = text
                type ur_index = index
                val refer : ur_text -> ur_index -> ur_index -> t
                val excerpt : t -> ur_text
                val context : t -> ur_text * ur_index * ur_index
                val ur_index_of : t -> index -> ur_index
              end
            val compile : regexp -> compiled_regexp
            val regexp_match :
              ?sem:match_semantics ->
              compiled_regexp ->
              text -> index -> SubText.t option array option
            val string_match : compiled_regexp -> text -> index -> bool
            val search_forward :
              ?sem:match_semantics ->
              compiled_regexp ->
              text -> index -> SubText.t option array option
          end
    end
  module CharEncoding :
    sig
      module type Interface =
        sig
          exception Malformed_code
          exception Out_of_range
          type t
          val automatic :
            string ->
            CamomileLibrary.CharEncoding.Interface.t list ->
            CamomileLibrary.CharEncoding.Interface.t ->
            CamomileLibrary.CharEncoding.Interface.t
          val new_enc :
            string -> CamomileLibrary.CharEncoding.Interface.t -> unit
          val alias : string -> string -> unit
          val of_name : string -> CamomileLibrary.CharEncoding.Interface.t
          val name_of : CamomileLibrary.CharEncoding.Interface.t -> string
          val ascii : CamomileLibrary.CharEncoding.Interface.t
          val latin1 : CamomileLibrary.CharEncoding.Interface.t
          val utf8 : CamomileLibrary.CharEncoding.Interface.t
          val utf16 : CamomileLibrary.CharEncoding.Interface.t
          val utf16be : CamomileLibrary.CharEncoding.Interface.t
          val utf16le : CamomileLibrary.CharEncoding.Interface.t
          val utf32 : CamomileLibrary.CharEncoding.Interface.t
          val utf32be : CamomileLibrary.CharEncoding.Interface.t
          val utf32le : CamomileLibrary.CharEncoding.Interface.t
          val ucs4 : CamomileLibrary.CharEncoding.Interface.t
          val recode_string :
            in_enc:CamomileLibrary.CharEncoding.Interface.t ->
            out_enc:CamomileLibrary.CharEncoding.Interface.t ->
            string -> string
          class uchar_input_channel_of :
            CamomileLibrary.CharEncoding.Interface.t ->
            CamomileLibrary.OOChannel.char_input_channel ->
            [CamomileLibrary.UChar.t] OOChannel.obj_input_channel
          class uchar_output_channel_of :
            CamomileLibrary.CharEncoding.Interface.t ->
            CamomileLibrary.OOChannel.char_output_channel ->
            [CamomileLibrary.UChar.t] OOChannel.obj_output_channel
          class convert_uchar_input :
            CamomileLibrary.CharEncoding.Interface.t ->
            CamomileLibrary.UChar.t
            CamomileLibrary.OOChannel.obj_input_channel ->
            OOChannel.char_input_channel
          class convert_uchar_output :
            CamomileLibrary.CharEncoding.Interface.t ->
            CamomileLibrary.UChar.t
            CamomileLibrary.OOChannel.obj_output_channel ->
            OOChannel.char_output_channel
          class convert_input :
            in_enc:CamomileLibrary.CharEncoding.Interface.t ->
            out_enc:CamomileLibrary.CharEncoding.Interface.t ->
            CamomileLibrary.OOChannel.char_input_channel ->
            OOChannel.char_input_channel
          class convert_output :
            in_enc:CamomileLibrary.CharEncoding.Interface.t ->
            out_enc:CamomileLibrary.CharEncoding.Interface.t ->
            CamomileLibrary.OOChannel.char_output_channel ->
            OOChannel.char_output_channel
          class out_channel :
            CamomileLibrary.CharEncoding.Interface.t ->
            Pervasives.out_channel ->
            [CamomileLibrary.UChar.t] OOChannel.obj_output_channel
          class in_channel :
            CamomileLibrary.CharEncoding.Interface.t ->
            Pervasives.in_channel ->
            [CamomileLibrary.UChar.t] OOChannel.obj_input_channel
          val ustream_of :
            CamomileLibrary.CharEncoding.Interface.t ->
            char Stream.t -> CamomileLibrary.UChar.t Stream.t
          val char_stream_of :
            CamomileLibrary.CharEncoding.Interface.t ->
            CamomileLibrary.UChar.t Stream.t -> char Stream.t
          module type Type =
            sig
              type text
              val decode :
                CamomileLibrary.CharEncoding.Interface.t ->
                string -> CamomileLibrary.CharEncoding.Interface.Type.text
              val encode :
                CamomileLibrary.CharEncoding.Interface.t ->
                CamomileLibrary.CharEncoding.Interface.Type.text -> string
            end
          module Make :
            functor (Text : UnicodeString.Type->
              sig
                type text = Text.t
                val decode : t -> string -> text
                val encode : t -> text -> string
              end
        end
      module Configure : functor (Config : ConfigInt.Type-> Interface
    end
  module UCharInfo :
    sig
      module type Type =
        sig
          type general_category_type =
              [ `Cc
              | `Cf
              | `Cn
              | `Co
              | `Cs
              | `Ll
              | `Lm
              | `Lo
              | `Lt
              | `Lu
              | `Mc
              | `Me
              | `Mn
              | `Nd
              | `Nl
              | `No
              | `Pc
              | `Pd
              | `Pe
              | `Pf
              | `Pi
              | `Po
              | `Ps
              | `Sc
              | `Sk
              | `Sm
              | `So
              | `Zl
              | `Zp
              | `Zs ]
          val general_category :
            CamomileLibrary.UChar.t ->
            CamomileLibrary.UCharInfo.Type.general_category_type
          val load_general_category_map :
            unit ->
            CamomileLibrary.UCharInfo.Type.general_category_type
            CamomileLibrary.UMap.t
          type character_property_type =
              [ `Alphabetic
              | `Ascii_Hex_Digit
              | `Bidi_Control
              | `Default_Ignorable_Code_Point
              | `Deprecated
              | `Diacritic
              | `Extender
              | `Grapheme_Base
              | `Grapheme_Extend
              | `Grapheme_Link
              | `Hex_Digit
              | `Hyphen
              | `IDS_Binary_Operator
              | `IDS_Trinary_Operator
              | `ID_Continue
              | `ID_Start
              | `Ideographic
              | `Logical_Order_Exception
              | `Lowercase
              | `Math
              | `Noncharacter_Code_Point
              | `Other_Alphabetic
              | `Other_Grapheme_Extend
              | `Other_Lowercase
              | `Other_Math
              | `Other_Uppercase
              | `Other_default_Ignorable_Code_Point
              | `Quotation_Mark
              | `Radical
              | `Soft_Dotted
              | `Terminal_Punctuation
              | `Unified_Ideograph
              | `Uppercase
              | `White_Space
              | `XID_Continue
              | `XID_Start ]
          val load_property_tbl :
            CamomileLibrary.UCharInfo.Type.character_property_type ->
            CamomileLibrary.UCharTbl.Bool.t
          val load_property_tbl_by_name :
            string -> CamomileLibrary.UCharTbl.Bool.t
          val load_property_set :
            CamomileLibrary.UCharInfo.Type.character_property_type ->
            CamomileLibrary.USet.t
          val load_property_set_by_name : string -> CamomileLibrary.USet.t
          type script_type =
              [ `Arabic
              | `Armenian
              | `Bengali
              | `Bopomofo
              | `Buhid
              | `Canadian_Aboriginal
              | `Cherokee
              | `Common
              | `Cyrillic
              | `Deseret
              | `Devanagari
              | `Ethiopic
              | `Georgian
              | `Gothic
              | `Greek
              | `Gujarati
              | `Gurmukhi
              | `Han
              | `Hangul
              | `Hanunoo
              | `Hebrew
              | `Hiragana
              | `Inherited
              | `Kannada
              | `Katakana
              | `Khmer
              | `Lao
              | `Latin
              | `Malayalam
              | `Mongolian
              | `Myanmar
              | `Ogham
              | `Old_Italic
              | `Oriya
              | `Runic
              | `Sinhala
              | `Syriac
              | `Tagalog
              | `Tagbanwa
              | `Tamil
              | `Telugu
              | `Thaana
              | `Thai
              | `Tibetan
              | `Yi ]
          val script :
            CamomileLibrary.UChar.t ->
            CamomileLibrary.UCharInfo.Type.script_type
          val load_script_map :
            unit ->
            CamomileLibrary.UCharInfo.Type.script_type CamomileLibrary.UMap.t
          type version_type =
              [ `Nc | `v1_0 | `v1_1 | `v2_0 | `v2_1 | `v3_0 | `v3_1 | `v3_2 ]
          val age :
            CamomileLibrary.UChar.t ->
            CamomileLibrary.UCharInfo.Type.version_type
          val older :
            CamomileLibrary.UCharInfo.Type.version_type ->
            CamomileLibrary.UCharInfo.Type.version_type -> bool
          val load_to_lower1_tbl :
            unit -> CamomileLibrary.UChar.t CamomileLibrary.UCharTbl.t
          val load_to_upper1_tbl :
            unit -> CamomileLibrary.UChar.t CamomileLibrary.UCharTbl.t
          val load_to_title1_tbl :
            unit -> CamomileLibrary.UChar.t CamomileLibrary.UCharTbl.t
          type casemap_condition =
              [ `AfterSoftDotted
              | `BeforeDot
              | `FinalSigma
              | `Locale of string
              | `MoreAbove
              | `Not of CamomileLibrary.UCharInfo.Type.casemap_condition ]
          type special_casing_property = {
            lower : CamomileLibrary.UChar.t list;
            title : CamomileLibrary.UChar.t list;
            upper : CamomileLibrary.UChar.t list;
            condition : CamomileLibrary.UCharInfo.Type.casemap_condition list;
          }
          val load_conditional_casing_tbl :
            unit ->
            CamomileLibrary.UCharInfo.Type.special_casing_property list
            CamomileLibrary.UCharTbl.t
          val load_casefolding_tbl :
            unit -> CamomileLibrary.UChar.t list CamomileLibrary.UCharTbl.t
          val combined_class : CamomileLibrary.UChar.t -> int
          type decomposition_type =
              [ `Canon
              | `Circle
              | `Compat
              | `Final
              | `Font
              | `Fraction
              | `Initial
              | `Isolated
              | `Medial
              | `Narrow
              | `NoBreak
              | `Small
              | `Square
              | `Sub
              | `Super
              | `Vertical
              | `Wide ]
          type decomposition_info =
              [ `Canonform
              | `Composite of
                  CamomileLibrary.UCharInfo.Type.decomposition_type *
                  CamomileLibrary.UChar.t list
              | `HangulSyllable ]
          val load_decomposition_tbl :
            unit ->
            CamomileLibrary.UCharInfo.Type.decomposition_info
            CamomileLibrary.UCharTbl.t
          val load_composition_tbl :
            unit ->
            (CamomileLibrary.UChar.t * CamomileLibrary.UChar.t) list
            CamomileLibrary.UCharTbl.t
          val load_composition_exclusion_tbl :
            unit -> CamomileLibrary.UCharTbl.Bool.t
        end
      module Make : functor (Config : ConfigInt.Type-> Type
    end
  module UNF :
    sig
      module type Type =
        sig
          type text
          class nfd :
            CamomileLibrary.UChar.t
            #CamomileLibrary.OOChannel.obj_output_channel ->
            [CamomileLibrary.UChar.t] OOChannel.obj_output_channel
          class nfc :
            CamomileLibrary.UChar.t
            #CamomileLibrary.OOChannel.obj_output_channel ->
            [CamomileLibrary.UChar.t] OOChannel.obj_output_channel
          class nfkd :
            CamomileLibrary.UChar.t
            #CamomileLibrary.OOChannel.obj_output_channel ->
            [CamomileLibrary.UChar.t] OOChannel.obj_output_channel
          class nfkc :
            CamomileLibrary.UChar.t
            #CamomileLibrary.OOChannel.obj_output_channel ->
            [CamomileLibrary.UChar.t] OOChannel.obj_output_channel
          val nfd :
            CamomileLibrary.UNF.Type.text -> CamomileLibrary.UNF.Type.text
          val nfkd :
            CamomileLibrary.UNF.Type.text -> CamomileLibrary.UNF.Type.text
          val nfc :
            CamomileLibrary.UNF.Type.text -> CamomileLibrary.UNF.Type.text
          val nfkc :
            CamomileLibrary.UNF.Type.text -> CamomileLibrary.UNF.Type.text
          module NFCBuf :
            sig
              type buf
              val create : int -> CamomileLibrary.UNF.Type.NFCBuf.buf
              val contents :
                CamomileLibrary.UNF.Type.NFCBuf.buf ->
                CamomileLibrary.UNF.Type.text
              val clear : CamomileLibrary.UNF.Type.NFCBuf.buf -> unit
              val reset : CamomileLibrary.UNF.Type.NFCBuf.buf -> unit
              val add_char :
                CamomileLibrary.UNF.Type.NFCBuf.buf ->
                CamomileLibrary.UChar.t -> unit
              val add_string :
                CamomileLibrary.UNF.Type.NFCBuf.buf ->
                CamomileLibrary.UNF.Type.text -> unit
              val add_buffer :
                CamomileLibrary.UNF.Type.NFCBuf.buf ->
                CamomileLibrary.UNF.Type.NFCBuf.buf -> unit
            end
          val nfc_append :
            CamomileLibrary.UNF.Type.text ->
            CamomileLibrary.UNF.Type.text -> CamomileLibrary.UNF.Type.text
          val put_nfd :
            CamomileLibrary.XString.t ->
            CamomileLibrary.UNF.Type.text -> unit
          val put_nfkd :
            CamomileLibrary.XString.t ->
            CamomileLibrary.UNF.Type.text -> unit
          val put_nfc :
            CamomileLibrary.XString.t ->
            CamomileLibrary.UNF.Type.text -> unit
          val put_nfkc :
            CamomileLibrary.XString.t ->
            CamomileLibrary.UNF.Type.text -> unit
          type index
          val nfd_inc :
            CamomileLibrary.UNF.Type.text ->
            CamomileLibrary.UNF.Type.index ->
            ([ `Inc of
                 CamomileLibrary.UChar.t list *
                 CamomileLibrary.UNF.Type.index * 'a lazy_t ]
             as 'a)
          val canon_compare :
            CamomileLibrary.UNF.Type.text ->
            CamomileLibrary.UNF.Type.text -> int
          val nfd_decompose :
            CamomileLibrary.UChar.t -> CamomileLibrary.UChar.t list
          val nfkd_decompose :
            CamomileLibrary.UChar.t -> CamomileLibrary.UChar.t list
        end
      module Make :
        functor (Config : ConfigInt.Type->
          functor (Text : UnicodeString.Type->
            sig
              type text = Text.t
              class nfd :
                UChar.t #OOChannel.obj_output_channel ->
                [UChar.t] OOChannel.obj_output_channel
              class nfc :
                UChar.t #OOChannel.obj_output_channel ->
                [UChar.t] OOChannel.obj_output_channel
              class nfkd :
                UChar.t #OOChannel.obj_output_channel ->
                [UChar.t] OOChannel.obj_output_channel
              class nfkc :
                UChar.t #OOChannel.obj_output_channel ->
                [UChar.t] OOChannel.obj_output_channel
              val nfd : text -> text
              val nfkd : text -> text
              val nfc : text -> text
              val nfkc : text -> text
              module NFCBuf :
                sig
                  type buf
                  val create : int -> buf
                  val contents : buf -> text
                  val clear : buf -> unit
                  val reset : buf -> unit
                  val add_char : buf -> UChar.t -> unit
                  val add_string : buf -> text -> unit
                  val add_buffer : buf -> buf -> unit
                end
              val nfc_append : text -> text -> text
              val put_nfd : XString.t -> text -> unit
              val put_nfkd : XString.t -> text -> unit
              val put_nfc : XString.t -> text -> unit
              val put_nfkc : XString.t -> text -> unit
              type index = Text.index
              val nfd_inc :
                text ->
                index -> ([ `Inc of UChar.t list * index * 'a lazy_t ] as 'a)
              val canon_compare : text -> text -> int
              val nfd_decompose : UChar.t -> UChar.t list
              val nfkd_decompose : UChar.t -> UChar.t list
            end
    end
  module UCol :
    sig
      type variable_option =
          [ `Blanked | `Non_ignorable | `Shift_Trimmed | `Shifted ]
      type precision = [ `Primary | `Quaternary | `Secondary | `Tertiary ]
      module type Type =
        sig
          type text
          type index
          val compare :
            ?locale:string ->
            ?prec:CamomileLibrary.UCol.precision ->
            ?variable:CamomileLibrary.UCol.variable_option ->
            CamomileLibrary.UCol.Type.text ->
            CamomileLibrary.UCol.Type.text -> int
          val sort_key :
            ?locale:string ->
            ?prec:CamomileLibrary.UCol.precision ->
            ?variable:CamomileLibrary.UCol.variable_option ->
            CamomileLibrary.UCol.Type.text -> string
          val compare_with_key :
            ?locale:string ->
            ?prec:CamomileLibrary.UCol.precision ->
            ?variable:CamomileLibrary.UCol.variable_option ->
            string -> CamomileLibrary.UCol.Type.text -> int
          val search_with_key :
            ?locale:string ->
            ?prec:CamomileLibrary.UCol.precision ->
            ?variable:CamomileLibrary.UCol.variable_option ->
            string ->
            CamomileLibrary.UCol.Type.text ->
            CamomileLibrary.UCol.Type.index ->
            CamomileLibrary.UCol.Type.index * CamomileLibrary.UCol.Type.index
          val search :
            ?locale:string ->
            ?prec:CamomileLibrary.UCol.precision ->
            ?variable:CamomileLibrary.UCol.variable_option ->
            CamomileLibrary.UCol.Type.text ->
            CamomileLibrary.UCol.Type.text ->
            CamomileLibrary.UCol.Type.index ->
            CamomileLibrary.UCol.Type.index * CamomileLibrary.UCol.Type.index
        end
      module Make :
        functor (Config : ConfigInt.Type->
          functor (Text : UnicodeString.Type->
            sig
              type text = Text.t
              type index = Text.index
              val compare :
                ?locale:string ->
                ?prec:precision ->
                ?variable:variable_option -> text -> text -> int
              val sort_key :
                ?locale:string ->
                ?prec:precision ->
                ?variable:variable_option -> text -> string
              val compare_with_key :
                ?locale:string ->
                ?prec:precision ->
                ?variable:variable_option -> string -> text -> int
              val search_with_key :
                ?locale:string ->
                ?prec:precision ->
                ?variable:variable_option ->
                string -> text -> index -> index * index
              val search :
                ?locale:string ->
                ?prec:precision ->
                ?variable:variable_option ->
                text -> text -> index -> index * index
            end
    end
  module CaseMap :
    sig
      module type Type =
        sig
          type text
          val lowercase :
            ?locale:string ->
            CamomileLibrary.CaseMap.Type.text ->
            CamomileLibrary.CaseMap.Type.text
          val uppercase :
            ?locale:string ->
            CamomileLibrary.CaseMap.Type.text ->
            CamomileLibrary.CaseMap.Type.text
          val titlecase :
            ?locale:string ->
            CamomileLibrary.CaseMap.Type.text ->
            CamomileLibrary.CaseMap.Type.text
          val casefolding :
            CamomileLibrary.CaseMap.Type.text ->
            CamomileLibrary.CaseMap.Type.text
          val compare_caseless :
            CamomileLibrary.CaseMap.Type.text ->
            CamomileLibrary.CaseMap.Type.text -> int
        end
      module Make :
        functor (Config : ConfigInt.Type->
          functor (Text : UnicodeString.Type->
            sig
              type text = Text.t
              val lowercase : ?locale:string -> text -> text
              val uppercase : ?locale:string -> text -> text
              val titlecase : ?locale:string -> text -> text
              val casefolding : text -> text
              val compare_caseless : text -> text -> int
            end
    end
  module UReStr :
    sig
      module type Interface =
        sig
          type regexp = CamomileLibrary.URe.regexp
          val regexp : string -> CamomileLibrary.UReStr.Interface.regexp
          val quote : string -> string
          val regexp_string :
            string -> CamomileLibrary.UReStr.Interface.regexp
          module type Type =
            sig
              type text
              type index
              type compiled_regexp
              module SubText :
                sig
                  type t
                  val get : t -> int -> UChar.t
                  val init : int -> (int -> UChar.t) -> t
                  val length : t -> int
                  type index
                  val look : t -> index -> UChar.t
                  val nth : t -> int -> index
                  val first : t -> index
                  val last : t -> index
                  val next : t -> index -> index
                  val prev : t -> index -> index
                  val move : t -> index -> int -> index
                  val out_of_range : t -> index -> bool
                  val compare_index : t -> index -> index -> int
                  val iter : (UChar.t -> unit) -> t -> unit
                  val compare : t -> t -> int
                  module Buf :
                    sig
                      type buf
                      val create : int -> buf
                      val contents : buf -> t
                      val clear : buf -> unit
                      val reset : buf -> unit
                      val add_char : buf -> UChar.t -> unit
                      val add_string : buf -> t -> unit
                      val add_buffer : buf -> buf -> unit
                    end
                  type ur_text = text
                  type ur_index = index
                  val refer : ur_text -> ur_index -> ur_index -> t
                  val excerpt : t -> ur_text
                  val context : t -> ur_text * ur_index * ur_index
                  val ur_index_of : t -> index -> ur_index
                end
              val compile :
                CamomileLibrary.UReStr.Interface.regexp ->
                CamomileLibrary.UReStr.Interface.Type.compiled_regexp
              val regexp_match :
                ?sem:CamomileLibrary.URe.match_semantics ->
                CamomileLibrary.UReStr.Interface.Type.compiled_regexp ->
                CamomileLibrary.UReStr.Interface.Type.text ->
                CamomileLibrary.UReStr.Interface.Type.index ->
                CamomileLibrary.UReStr.Interface.Type.SubText.t option array
                option
              val string_match :
                CamomileLibrary.UReStr.Interface.Type.compiled_regexp ->
                CamomileLibrary.UReStr.Interface.Type.text ->
                CamomileLibrary.UReStr.Interface.Type.index -> bool
              val search_forward :
                ?sem:CamomileLibrary.URe.match_semantics ->
                CamomileLibrary.UReStr.Interface.Type.compiled_regexp ->
                CamomileLibrary.UReStr.Interface.Type.text ->
                CamomileLibrary.UReStr.Interface.Type.index ->
                CamomileLibrary.UReStr.Interface.Type.SubText.t option array
                option
            end
          module Make :
            functor (Text : UnicodeString.Type->
              sig
                type text = Text.t
                type index = Text.index
                type compiled_regexp
                module SubText :
                  sig
                    type t
                    val get : t -> int -> UChar.t
                    val init : int -> (int -> UChar.t) -> t
                    val length : t -> int
                    type index
                    val look : t -> index -> UChar.t
                    val nth : t -> int -> index
                    val first : t -> index
                    val last : t -> index
                    val next : t -> index -> index
                    val prev : t -> index -> index
                    val move : t -> index -> int -> index
                    val out_of_range : t -> index -> bool
                    val compare_index : t -> index -> index -> int
                    val iter : (UChar.t -> unit) -> t -> unit
                    val compare : t -> t -> int
                    module Buf :
                      sig
                        type buf
                        val create : int -> buf
                        val contents : buf -> t
                        val clear : buf -> unit
                        val reset : buf -> unit
                        val add_char : buf -> UChar.t -> unit
                        val add_string : buf -> t -> unit
                        val add_buffer : buf -> buf -> unit
                      end
                    type ur_text = text
                    type ur_index = index
                    val refer : ur_text -> ur_index -> ur_index -> t
                    val excerpt : t -> ur_text
                    val context : t -> ur_text * ur_index * ur_index
                    val ur_index_of : t -> index -> ur_index
                  end
                val compile : regexp -> compiled_regexp
                val regexp_match :
                  ?sem:URe.match_semantics ->
                  compiled_regexp ->
                  text -> index -> SubText.t option array option
                val string_match : compiled_regexp -> text -> index -> bool
                val search_forward :
                  ?sem:URe.match_semantics ->
                  compiled_regexp ->
                  text -> index -> SubText.t option array option
              end
        end
      module Configure : functor (Config : ConfigInt.Type-> Interface
    end
  module StringPrep :
    sig
      module type Type =
        sig
          type text
          exception Prohibited of CamomileLibrary.UChar.t
          exception Bad_bidi
          type profile =
              [ `Iscsi
              | `Mib
              | `Nameprep
              | `Nodeprep
              | `Resourceprep
              | `Saslprep
              | `Trace ]
          val stringprep :
            CamomileLibrary.StringPrep.Type.profile ->
            CamomileLibrary.StringPrep.Type.text ->
            CamomileLibrary.StringPrep.Type.text
        end
      module Make :
        functor (Config : ConfigInt.Type->
          functor (Text : UnicodeString.Type->
            sig
              type text = Text.t
              exception Prohibited of UChar.t
              exception Bad_bidi
              type profile =
                  [ `Iscsi
                  | `Mib
                  | `Nameprep
                  | `Nodeprep
                  | `Resourceprep
                  | `Saslprep
                  | `Trace ]
              val stringprep : profile -> text -> text
            end
    end
  module type Type =
    sig
      module OOChannel :
        sig
          class type ['a] obj_input_channel =
            object method close_in : unit -> unit method get : unit -> 'end
          class type ['a] obj_output_channel =
            object
              method close_out : unit -> unit
              method flush : unit -> unit
              method put : '-> unit
            end
          class ['a] channel_of_stream :
            'Stream.t -> ['a] obj_input_channel
          val stream_of_channel :
            '#CamomileLibrary.Type.OOChannel.obj_input_channel ->
            'Stream.t
          class type char_input_channel =
            object
              method close_in : unit -> unit
              method input : string -> int -> int -> int
            end
          class type char_output_channel =
            object
              method close_out : unit -> unit
              method flush : unit -> unit
              method output : string -> int -> int -> int
            end
          class char_input_channel_of :
            char #CamomileLibrary.Type.OOChannel.obj_input_channel ->
            char_input_channel
          class char_obj_input_channel_of :
            CamomileLibrary.Type.OOChannel.char_input_channel ->
            [char] obj_input_channel
          class char_output_channel_of :
            char #CamomileLibrary.Type.OOChannel.obj_output_channel ->
            char_output_channel
          class char_obj_output_channel_of :
            CamomileLibrary.Type.OOChannel.char_output_channel ->
            [char] obj_output_channel
          class of_in_channel : Pervasives.in_channel -> char_input_channel
          class of_out_channel :
            Pervasives.out_channel -> char_output_channel
        end
      module UChar :
        sig
          type t
          exception Out_of_range
          val char_of : CamomileLibrary.Type.UChar.t -> char
          val of_char : char -> CamomileLibrary.Type.UChar.t
          val code : CamomileLibrary.Type.UChar.t -> int
          val chr : int -> CamomileLibrary.Type.UChar.t
          external uint_code : CamomileLibrary.Type.UChar.t -> int
            = "%identity"
          val chr_of_uint : int -> CamomileLibrary.Type.UChar.t
          val eq :
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.UChar.t -> bool
          val compare :
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.UChar.t -> int
          type uchar = CamomileLibrary.Type.UChar.t
          val int_of : CamomileLibrary.Type.UChar.uchar -> int
          val of_int : int -> CamomileLibrary.Type.UChar.uchar
        end
      module USet :
        sig
          type t
          val empty : CamomileLibrary.Type.USet.t
          val is_empty : CamomileLibrary.Type.USet.t -> bool
          val mem :
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.USet.t -> bool
          val add :
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.USet.t
          val add_range :
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.USet.t
          val singleton :
            CamomileLibrary.Type.UChar.t -> CamomileLibrary.Type.USet.t
          val remove :
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.USet.t
          val remove_range :
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.USet.t
          val union :
            CamomileLibrary.Type.USet.t ->
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.USet.t
          val inter :
            CamomileLibrary.Type.USet.t ->
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.USet.t
          val diff :
            CamomileLibrary.Type.USet.t ->
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.USet.t
          val compl :
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.USet.t
          val compare :
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.USet.t -> int
          val equal :
            CamomileLibrary.Type.USet.t ->
            CamomileLibrary.Type.USet.t -> bool
          val subset :
            CamomileLibrary.Type.USet.t ->
            CamomileLibrary.Type.USet.t -> bool
          val from :
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.USet.t
          val after :
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.USet.t
          val until :
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.USet.t
          val before :
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.USet.t
          val iter :
            (CamomileLibrary.Type.UChar.t -> unit) ->
            CamomileLibrary.Type.USet.t -> unit
          val iter_range :
            (CamomileLibrary.Type.UChar.t ->
             CamomileLibrary.Type.UChar.t -> unit) ->
            CamomileLibrary.Type.USet.t -> unit
          val fold :
            (CamomileLibrary.Type.UChar.t -> '-> 'a) ->
            CamomileLibrary.Type.USet.t -> '-> 'a
          val fold_range :
            (CamomileLibrary.Type.UChar.t ->
             CamomileLibrary.Type.UChar.t -> '-> 'a) ->
            CamomileLibrary.Type.USet.t -> '-> 'a
          val for_all :
            (CamomileLibrary.Type.UChar.t -> bool) ->
            CamomileLibrary.Type.USet.t -> bool
          val exists :
            (CamomileLibrary.Type.UChar.t -> bool) ->
            CamomileLibrary.Type.USet.t -> bool
          val filter :
            (CamomileLibrary.Type.UChar.t -> bool) ->
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.USet.t
          val partition :
            (CamomileLibrary.Type.UChar.t -> bool) ->
            CamomileLibrary.Type.USet.t ->
            CamomileLibrary.Type.USet.t * CamomileLibrary.Type.USet.t
          val cardinal : CamomileLibrary.Type.USet.t -> int
          val elements :
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.UChar.t list
          val ranges :
            CamomileLibrary.Type.USet.t ->
            (CamomileLibrary.Type.UChar.t * CamomileLibrary.Type.UChar.t)
            list
          val min_elt :
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.UChar.t
          val max_elt :
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.UChar.t
          val choose :
            CamomileLibrary.Type.USet.t -> CamomileLibrary.Type.UChar.t
          val uset_of_iset : ISet.t -> CamomileLibrary.Type.USet.t
          val iset_of_uset : CamomileLibrary.Type.USet.t -> ISet.t
        end
      module UMap :
        sig
          type 'a t
          val empty : 'CamomileLibrary.Type.UMap.t
          val is_empty : 'CamomileLibrary.Type.UMap.t -> bool
          val add :
            ?eq:('-> '-> bool) ->
            CamomileLibrary.Type.UChar.t ->
            '->
            'CamomileLibrary.Type.UMap.t -> 'CamomileLibrary.Type.UMap.t
          val add_range :
            ?eq:('-> '-> bool) ->
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.UChar.t ->
            '->
            'CamomileLibrary.Type.UMap.t -> 'CamomileLibrary.Type.UMap.t
          val find :
            CamomileLibrary.Type.UChar.t ->
            'CamomileLibrary.Type.UMap.t -> 'a
          val remove :
            CamomileLibrary.Type.UChar.t ->
            'CamomileLibrary.Type.UMap.t -> 'CamomileLibrary.Type.UMap.t
          val remove_range :
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.UChar.t ->
            'CamomileLibrary.Type.UMap.t -> 'CamomileLibrary.Type.UMap.t
          val from :
            CamomileLibrary.Type.UChar.t ->
            'CamomileLibrary.Type.UMap.t -> 'CamomileLibrary.Type.UMap.t
          val after :
            CamomileLibrary.Type.UChar.t ->
            'CamomileLibrary.Type.UMap.t -> 'CamomileLibrary.Type.UMap.t
          val until :
            CamomileLibrary.Type.UChar.t ->
            'CamomileLibrary.Type.UMap.t -> 'CamomileLibrary.Type.UMap.t
          val before :
            CamomileLibrary.Type.UChar.t ->
            'CamomileLibrary.Type.UMap.t -> 'CamomileLibrary.Type.UMap.t
          val mem :
            CamomileLibrary.Type.UChar.t ->
            'CamomileLibrary.Type.UMap.t -> bool
          val iter :
            (CamomileLibrary.Type.UChar.t -> '-> unit) ->
            'CamomileLibrary.Type.UMap.t -> unit
          val iter_range :
            (CamomileLibrary.Type.UChar.t ->
             CamomileLibrary.Type.UChar.t -> '-> unit) ->
            'CamomileLibrary.Type.UMap.t -> unit
          val map :
            ?eq:('-> '-> bool) ->
            ('-> 'a) ->
            'CamomileLibrary.Type.UMap.t -> 'CamomileLibrary.Type.UMap.t
          val mapi :
            ?eq:('-> '-> bool) ->
            (CamomileLibrary.Type.UChar.t -> '-> 'a) ->
            'CamomileLibrary.Type.UMap.t -> 'CamomileLibrary.Type.UMap.t
          val fold :
            (CamomileLibrary.Type.UChar.t -> '-> '-> 'b) ->
            'CamomileLibrary.Type.UMap.t -> '-> 'b
          val fold_range :
            (CamomileLibrary.Type.UChar.t ->
             CamomileLibrary.Type.UChar.t -> '-> '-> 'b) ->
            'CamomileLibrary.Type.UMap.t -> '-> 'b
          val set_to_map :
            CamomileLibrary.Type.USet.t ->
            '-> 'CamomileLibrary.Type.UMap.t
          val domain :
            'CamomileLibrary.Type.UMap.t -> CamomileLibrary.Type.USet.t
          val map_to_set :
            ('-> bool) ->
            'CamomileLibrary.Type.UMap.t -> CamomileLibrary.Type.USet.t
          val umap_of_imap : 'IMap.t -> 'CamomileLibrary.Type.UMap.t
          val imap_of_umap : 'CamomileLibrary.Type.UMap.t -> 'IMap.t
        end
      module UCharTbl :
        sig
          type 'a tbl
          type 'a t = 'CamomileLibrary.Type.UCharTbl.tbl
          val get :
            'CamomileLibrary.Type.UCharTbl.tbl ->
            CamomileLibrary.Type.UChar.t -> 'a
          module type Type =
            sig
              type elt
              type t =
                  CamomileLibrary.Type.UCharTbl.Type.elt
                  CamomileLibrary.Type.UCharTbl.tbl
              val get :
                CamomileLibrary.Type.UCharTbl.Type.elt
                CamomileLibrary.Type.UCharTbl.tbl ->
                CamomileLibrary.Type.UChar.t ->
                CamomileLibrary.Type.UCharTbl.Type.elt
              val of_map :
                CamomileLibrary.Type.UCharTbl.Type.elt ->
                CamomileLibrary.Type.UCharTbl.Type.elt
                CamomileLibrary.Type.UMap.t ->
                CamomileLibrary.Type.UCharTbl.Type.t
            end
          module Make :
            functor (H : Hashtbl.HashedType->
              sig
                type elt = H.t
                type t = elt tbl
                val get : elt tbl -> UChar.t -> elt
                val of_map : elt -> elt UMap.t -> t
              end
          module Bool :
            sig
              type t
              val get :
                CamomileLibrary.Type.UCharTbl.Bool.t ->
                CamomileLibrary.Type.UChar.t -> bool
              val of_set :
                CamomileLibrary.Type.USet.t ->
                CamomileLibrary.Type.UCharTbl.Bool.t
            end
          module Bits :
            sig
              type t
              val of_map :
                int ->
                int CamomileLibrary.Type.UMap.t ->
                CamomileLibrary.Type.UCharTbl.Bits.t
              val get :
                CamomileLibrary.Type.UCharTbl.Bits.t ->
                CamomileLibrary.Type.UChar.t -> int
            end
          module Bytes :
            sig
              type t
              val of_map :
                int ->
                int CamomileLibrary.Type.UMap.t ->
                CamomileLibrary.Type.UCharTbl.Bytes.t
              val get :
                CamomileLibrary.Type.UCharTbl.Bytes.t ->
                CamomileLibrary.Type.UChar.t -> int
            end
          module Char :
            sig
              type t
              val of_map :
                char ->
                char CamomileLibrary.Type.UMap.t ->
                CamomileLibrary.Type.UCharTbl.Char.t
              val get :
                CamomileLibrary.Type.UCharTbl.Char.t ->
                CamomileLibrary.Type.UChar.t -> char
            end
        end
      module UnicodeString :
        sig
          module type Type =
            sig
              type t
              val get :
                CamomileLibrary.Type.UnicodeString.Type.t ->
                int -> CamomileLibrary.Type.UChar.t
              val init :
                int ->
                (int -> CamomileLibrary.Type.UChar.t) ->
                CamomileLibrary.Type.UnicodeString.Type.t
              val length : CamomileLibrary.Type.UnicodeString.Type.t -> int
              type index
              val look :
                CamomileLibrary.Type.UnicodeString.Type.t ->
                CamomileLibrary.Type.UnicodeString.Type.index ->
                CamomileLibrary.Type.UChar.t
              val nth :
                CamomileLibrary.Type.UnicodeString.Type.t ->
                int -> CamomileLibrary.Type.UnicodeString.Type.index
              val next :
                CamomileLibrary.Type.UnicodeString.Type.t ->
                CamomileLibrary.Type.UnicodeString.Type.index ->
                CamomileLibrary.Type.UnicodeString.Type.index
              val prev :
                CamomileLibrary.Type.UnicodeString.Type.t ->
                CamomileLibrary.Type.UnicodeString.Type.index ->
                CamomileLibrary.Type.UnicodeString.Type.index
              val out_of_range :
                CamomileLibrary.Type.UnicodeString.Type.t ->
                CamomileLibrary.Type.UnicodeString.Type.index -> bool
              val iter :
                (CamomileLibrary.Type.UChar.t -> unit) ->
                CamomileLibrary.Type.UnicodeString.Type.t -> unit
              val compare :
                CamomileLibrary.Type.UnicodeString.Type.t ->
                CamomileLibrary.Type.UnicodeString.Type.t -> int
              val first :
                CamomileLibrary.Type.UnicodeString.Type.t ->
                CamomileLibrary.Type.UnicodeString.Type.index
              val last :
                CamomileLibrary.Type.UnicodeString.Type.t ->
                CamomileLibrary.Type.UnicodeString.Type.index
              val move :
                CamomileLibrary.Type.UnicodeString.Type.t ->
                CamomileLibrary.Type.UnicodeString.Type.index ->
                int -> CamomileLibrary.Type.UnicodeString.Type.index
              val compare_index :
                CamomileLibrary.Type.UnicodeString.Type.t ->
                CamomileLibrary.Type.UnicodeString.Type.index ->
                CamomileLibrary.Type.UnicodeString.Type.index -> int
              module Buf :
                sig
                  type buf
                  val create :
                    int -> CamomileLibrary.Type.UnicodeString.Type.Buf.buf
                  val contents :
                    CamomileLibrary.Type.UnicodeString.Type.Buf.buf ->
                    CamomileLibrary.Type.UnicodeString.Type.t
                  val clear :
                    CamomileLibrary.Type.UnicodeString.Type.Buf.buf -> unit
                  val reset :
                    CamomileLibrary.Type.UnicodeString.Type.Buf.buf -> unit
                  val add_char :
                    CamomileLibrary.Type.UnicodeString.Type.Buf.buf ->
                    CamomileLibrary.Type.UChar.t -> unit
                  val add_string :
                    CamomileLibrary.Type.UnicodeString.Type.Buf.buf ->
                    CamomileLibrary.Type.UnicodeString.Type.t -> unit
                  val add_buffer :
                    CamomileLibrary.Type.UnicodeString.Type.Buf.buf ->
                    CamomileLibrary.Type.UnicodeString.Type.Buf.buf -> unit
                end
            end
        end
      module UText :
        sig
          type mutability = [ `Immutable | `Mutable ]
          type 'a text
          type utext = [ `Immutable ] CamomileLibrary.Type.UText.text
          type ustring = [ `Mutable ] CamomileLibrary.Type.UText.text
          type t = CamomileLibrary.Type.UText.utext
          val utext_of_ustring :
            CamomileLibrary.Type.UText.ustring ->
            CamomileLibrary.Type.UText.utext
          val ustring_of_utext :
            CamomileLibrary.Type.UText.utext ->
            CamomileLibrary.Type.UText.ustring
          val get :
            'CamomileLibrary.Type.UText.text ->
            int -> CamomileLibrary.Type.UChar.t
          val set :
            CamomileLibrary.Type.UText.ustring ->
            int -> CamomileLibrary.Type.UChar.t -> unit
          type index
          val look :
            'CamomileLibrary.Type.UText.text ->
            CamomileLibrary.Type.UText.index -> CamomileLibrary.Type.UChar.t
          val nth :
            'CamomileLibrary.Type.UText.text ->
            int -> CamomileLibrary.Type.UText.index
          val first :
            'CamomileLibrary.Type.UText.text ->
            CamomileLibrary.Type.UText.index
          val last :
            'CamomileLibrary.Type.UText.text ->
            CamomileLibrary.Type.UText.index
          val out_of_range :
            'CamomileLibrary.Type.UText.text ->
            CamomileLibrary.Type.UText.index -> bool
          val compare_index :
            'CamomileLibrary.Type.UText.text ->
            CamomileLibrary.Type.UText.index ->
            CamomileLibrary.Type.UText.index -> int
          val next :
            'CamomileLibrary.Type.UText.text ->
            CamomileLibrary.Type.UText.index ->
            CamomileLibrary.Type.UText.index
          val prev :
            'CamomileLibrary.Type.UText.text ->
            CamomileLibrary.Type.UText.index ->
            CamomileLibrary.Type.UText.index
          val move :
            'CamomileLibrary.Type.UText.text ->
            CamomileLibrary.Type.UText.index ->
            int -> CamomileLibrary.Type.UText.index
          val length : 'CamomileLibrary.Type.UText.text -> int
          val of_string : string -> CamomileLibrary.Type.UText.utext
          val init :
            int ->
            (int -> CamomileLibrary.Type.UChar.t) ->
            CamomileLibrary.Type.UText.utext
          val init_ustring :
            int ->
            (int -> CamomileLibrary.Type.UChar.t) ->
            CamomileLibrary.Type.UText.ustring
          val make :
            int ->
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.UText.ustring
          val copy :
            CamomileLibrary.Type.UText.ustring ->
            CamomileLibrary.Type.UText.ustring
          val sub :
            'CamomileLibrary.Type.UText.text ->
            int -> int -> 'CamomileLibrary.Type.UText.text
          val fill :
            CamomileLibrary.Type.UText.ustring ->
            int -> int -> CamomileLibrary.Type.UChar.t -> unit
          val blit :
            'CamomileLibrary.Type.UText.text ->
            int -> CamomileLibrary.Type.UText.ustring -> int -> int -> unit
          val append :
            'CamomileLibrary.Type.UText.text ->
            'CamomileLibrary.Type.UText.text ->
            'CamomileLibrary.Type.UText.text
          val iter :
            (CamomileLibrary.Type.UChar.t -> unit) ->
            'CamomileLibrary.Type.UText.text -> unit
          val compare :
            'CamomileLibrary.Type.UText.text ->
            'CamomileLibrary.Type.UText.text -> int
          module Buf :
            sig
              type buf
              val create : int -> CamomileLibrary.Type.UText.Buf.buf
              val contents :
                CamomileLibrary.Type.UText.Buf.buf ->
                CamomileLibrary.Type.UText.t
              val contents_string :
                CamomileLibrary.Type.UText.Buf.buf ->
                CamomileLibrary.Type.UText.ustring
              val length : CamomileLibrary.Type.UText.Buf.buf -> int
              val clear : CamomileLibrary.Type.UText.Buf.buf -> unit
              val reset : CamomileLibrary.Type.UText.Buf.buf -> unit
              val add_char :
                CamomileLibrary.Type.UText.Buf.buf ->
                CamomileLibrary.Type.UChar.t -> unit
              val add_string :
                CamomileLibrary.Type.UText.Buf.buf ->
                'CamomileLibrary.Type.UText.text -> unit
              val add_buffer :
                CamomileLibrary.Type.UText.Buf.buf ->
                CamomileLibrary.Type.UText.Buf.buf -> unit
            end
        end
      module XString :
        sig
          type xstring
          type t = CamomileLibrary.Type.XString.xstring
          val get :
            CamomileLibrary.Type.XString.xstring ->
            int -> CamomileLibrary.Type.UChar.t
          val set :
            CamomileLibrary.Type.XString.xstring ->
            int -> CamomileLibrary.Type.UChar.t -> unit
          val length : CamomileLibrary.Type.XString.xstring -> int
          val init :
            int ->
            (int -> CamomileLibrary.Type.UChar.t) ->
            CamomileLibrary.Type.XString.xstring
          type index
          val look :
            CamomileLibrary.Type.XString.xstring ->
            CamomileLibrary.Type.XString.index ->
            CamomileLibrary.Type.UChar.t
          val nth :
            CamomileLibrary.Type.XString.xstring ->
            int -> CamomileLibrary.Type.XString.index
          val first :
            CamomileLibrary.Type.XString.xstring ->
            CamomileLibrary.Type.XString.index
          val last :
            CamomileLibrary.Type.XString.xstring ->
            CamomileLibrary.Type.XString.index
          val out_of_range :
            CamomileLibrary.Type.XString.xstring ->
            CamomileLibrary.Type.XString.index -> bool
          val next :
            CamomileLibrary.Type.XString.xstring ->
            CamomileLibrary.Type.XString.index ->
            CamomileLibrary.Type.XString.index
          val prev :
            CamomileLibrary.Type.XString.xstring ->
            CamomileLibrary.Type.XString.index ->
            CamomileLibrary.Type.XString.index
          val move :
            CamomileLibrary.Type.XString.xstring ->
            CamomileLibrary.Type.XString.index ->
            int -> CamomileLibrary.Type.XString.index
          val compare_index :
            CamomileLibrary.Type.XString.xstring ->
            CamomileLibrary.Type.XString.index ->
            CamomileLibrary.Type.XString.index -> int
          val make :
            ?bufsize:int ->
            int ->
            CamomileLibrary.Type.UChar.t ->
            CamomileLibrary.Type.XString.xstring
          val clear : CamomileLibrary.Type.XString.xstring -> unit
          val reset : CamomileLibrary.Type.XString.xstring -> unit
          val copy :
            CamomileLibrary.Type.XString.xstring ->
            CamomileLibrary.Type.XString.xstring
          val sub :
            CamomileLibrary.Type.XString.xstring ->
            int -> int -> CamomileLibrary.Type.XString.xstring
          val add_char :
            CamomileLibrary.Type.XString.xstring ->
            CamomileLibrary.Type.UChar.t -> unit
          val add_text :
            CamomileLibrary.Type.XString.xstring ->
            'CamomileLibrary.Type.UText.text -> unit
          val add_xstring :
            CamomileLibrary.Type.XString.xstring ->
            CamomileLibrary.Type.XString.xstring -> unit
          val shrink : CamomileLibrary.Type.XString.xstring -> int -> unit
          val append :
            CamomileLibrary.Type.XString.xstring ->
            CamomileLibrary.Type.XString.xstring ->
            CamomileLibrary.Type.XString.xstring
          val utext_of :
            CamomileLibrary.Type.XString.xstring ->
            CamomileLibrary.Type.UText.t
          val ustring_of :
            CamomileLibrary.Type.XString.xstring ->
            CamomileLibrary.Type.UText.ustring
          val iter :
            (CamomileLibrary.Type.UChar.t -> unit) ->
            CamomileLibrary.Type.XString.xstring -> unit
          val compare :
            CamomileLibrary.Type.XString.t ->
            CamomileLibrary.Type.XString.t -> int
          module Buf :
            sig
              type buf
              val create : int -> CamomileLibrary.Type.XString.Buf.buf
              val contents :
                CamomileLibrary.Type.XString.Buf.buf ->
                CamomileLibrary.Type.XString.t
              val length : CamomileLibrary.Type.XString.Buf.buf -> int
              val clear : CamomileLibrary.Type.XString.Buf.buf -> unit
              val reset : CamomileLibrary.Type.XString.Buf.buf -> unit
              val add_char :
                CamomileLibrary.Type.XString.Buf.buf ->
                CamomileLibrary.Type.UChar.t -> unit
              val add_string :
                CamomileLibrary.Type.XString.Buf.buf ->
                CamomileLibrary.Type.XString.t -> unit
              val add_buffer :
                CamomileLibrary.Type.XString.Buf.buf ->
                CamomileLibrary.Type.XString.Buf.buf -> unit
            end
        end
      module SubText :
        sig
          module type Type =
            sig
              type t
              val get :
                CamomileLibrary.Type.SubText.Type.t ->
                int -> CamomileLibrary.Type.UChar.t
              val init :
                int ->
                (int -> CamomileLibrary.Type.UChar.t) ->
                CamomileLibrary.Type.SubText.Type.t
              val length : CamomileLibrary.Type.SubText.Type.t -> int
              type index
              val look :
                CamomileLibrary.Type.SubText.Type.t ->
                CamomileLibrary.Type.SubText.Type.index ->
                CamomileLibrary.Type.UChar.t
              val nth :
                CamomileLibrary.Type.SubText.Type.t ->
                int -> CamomileLibrary.Type.SubText.Type.index
              val first :
                CamomileLibrary.Type.SubText.Type.t ->
                CamomileLibrary.Type.SubText.Type.index
              val last :
                CamomileLibrary.Type.SubText.Type.t ->
                CamomileLibrary.Type.SubText.Type.index
              val next :
                CamomileLibrary.Type.SubText.Type.t ->
                CamomileLibrary.Type.SubText.Type.index ->
                CamomileLibrary.Type.SubText.Type.index
              val prev :
                CamomileLibrary.Type.SubText.Type.t ->
                CamomileLibrary.Type.SubText.Type.index ->
                CamomileLibrary.Type.SubText.Type.index
              val move :
                CamomileLibrary.Type.SubText.Type.t ->
                CamomileLibrary.Type.SubText.Type.index ->
                int -> CamomileLibrary.Type.SubText.Type.index
              val out_of_range :
                CamomileLibrary.Type.SubText.Type.t ->
                CamomileLibrary.Type.SubText.Type.index -> bool
              val compare_index :
                CamomileLibrary.Type.SubText.Type.t ->
                CamomileLibrary.Type.SubText.Type.index ->
                CamomileLibrary.Type.SubText.Type.index -> int
              val iter :
                (CamomileLibrary.Type.UChar.t -> unit) ->
                CamomileLibrary.Type.SubText.Type.t -> unit
              val compare :
                CamomileLibrary.Type.SubText.Type.t ->
                CamomileLibrary.Type.SubText.Type.t -> int
              module Buf :
                sig
                  type buf
                  val create :
                    int -> CamomileLibrary.Type.SubText.Type.Buf.buf
                  val contents :
                    CamomileLibrary.Type.SubText.Type.Buf.buf ->
                    CamomileLibrary.Type.SubText.Type.t
                  val clear :
                    CamomileLibrary.Type.SubText.Type.Buf.buf -> unit
                  val reset :
                    CamomileLibrary.Type.SubText.Type.Buf.buf -> unit
                  val add_char :
                    CamomileLibrary.Type.SubText.Type.Buf.buf ->
                    CamomileLibrary.Type.UChar.t -> unit
                  val add_string :
                    CamomileLibrary.Type.SubText.Type.Buf.buf ->
                    CamomileLibrary.Type.SubText.Type.t -> unit
                  val add_buffer :
                    CamomileLibrary.Type.SubText.Type.Buf.buf ->
                    CamomileLibrary.Type.SubText.Type.Buf.buf -> unit
                end
              type ur_text
              type ur_index
              val refer :
                CamomileLibrary.Type.SubText.Type.ur_text ->
                CamomileLibrary.Type.SubText.Type.ur_index ->
                CamomileLibrary.Type.SubText.Type.ur_index ->
                CamomileLibrary.Type.SubText.Type.t
              val excerpt :
                CamomileLibrary.Type.SubText.Type.t ->
                CamomileLibrary.Type.SubText.Type.ur_text
              val context :
                CamomileLibrary.Type.SubText.Type.t ->
                CamomileLibrary.Type.SubText.Type.ur_text *
                CamomileLibrary.Type.SubText.Type.ur_index *
                CamomileLibrary.Type.SubText.Type.ur_index
              val ur_index_of :
                CamomileLibrary.Type.SubText.Type.t ->
                CamomileLibrary.Type.SubText.Type.index ->
                CamomileLibrary.Type.SubText.Type.ur_index
            end
          module Make :
            functor (Text : UnicodeString.Type->
              sig
                type t
                val get : t -> int -> UChar.t
                val init : int -> (int -> UChar.t) -> t
                val length : t -> int
                type index
                val look : t -> index -> UChar.t
                val nth : t -> int -> index
                val first : t -> index
                val last : t -> index
                val next : t -> index -> index
                val prev : t -> index -> index
                val move : t -> index -> int -> index
                val out_of_range : t -> index -> bool
                val compare_index : t -> index -> index -> int
                val iter : (UChar.t -> unit) -> t -> unit
                val compare : t -> t -> int
                module Buf :
                  sig
                    type buf
                    val create : int -> buf
                    val contents : buf -> t
                    val clear : buf -> unit
                    val reset : buf -> unit
                    val add_char : buf -> UChar.t -> unit
                    val add_string : buf -> t -> unit
                    val add_buffer : buf -> buf -> unit
                  end
                type ur_text = Text.t
                type ur_index = Text.index
                val refer : ur_text -> ur_index -> ur_index -> t
                val excerpt : t -> ur_text
                val context : t -> ur_text * ur_index * ur_index
                val ur_index_of : t -> index -> ur_index
              end
        end
      module ULine :
        sig
          type separator = [ `CR | `CRLF | `LF | `LS | `NEL | `PS ]
          class input :
            CamomileLibrary.Type.ULine.separator ->
            CamomileLibrary.Type.UChar.t
            #CamomileLibrary.Type.OOChannel.obj_input_channel ->
            [CamomileLibrary.Type.UChar.t] OOChannel.obj_input_channel
          class output :
            CamomileLibrary.Type.ULine.separator ->
            CamomileLibrary.Type.UChar.t
            #CamomileLibrary.Type.OOChannel.obj_output_channel ->
            [CamomileLibrary.Type.UChar.t] OOChannel.obj_output_channel
          module type Type =
            sig
              type text
              class input_line :
                CamomileLibrary.Type.UChar.t
                #CamomileLibrary.Type.OOChannel.obj_input_channel ->
                [CamomileLibrary.Type.ULine.Type.text]
                OOChannel.obj_input_channel
              class output_line :
                ?sp:CamomileLibrary.Type.ULine.separator ->
                CamomileLibrary.Type.UChar.t
                #CamomileLibrary.Type.OOChannel.obj_output_channel ->
                [CamomileLibrary.Type.ULine.Type.text]
                OOChannel.obj_output_channel
            end
          module Make :
            functor (Text : UnicodeString.Type->
              sig
                type text = Text.t
                class input_line :
                  UChar.t #OOChannel.obj_input_channel ->
                  [text] OOChannel.obj_input_channel
                class output_line :
                  ?sp:separator ->
                  UChar.t #OOChannel.obj_output_channel ->
                  [text] OOChannel.obj_output_channel
              end
        end
      module Locale :
        sig
          type t = string
          val read :
            string -> string -> (Pervasives.in_channel -> 'a) -> string -> 'a
          val contain : string -> string -> bool
        end
      module CharEncoding : CharEncoding.Interface
      module UTF8 :
        sig
          type t = string
          exception Malformed_code
          val validate : CamomileLibrary.Type.UTF8.t -> unit
          val get :
            CamomileLibrary.Type.UTF8.t ->
            int -> CamomileLibrary.Type.UChar.t
          val init :
            int ->
            (int -> CamomileLibrary.Type.UChar.t) ->
            CamomileLibrary.Type.UTF8.t
          val length : CamomileLibrary.Type.UTF8.t -> int
          type index = int
          val nth :
            CamomileLibrary.Type.UTF8.t ->
            int -> CamomileLibrary.Type.UTF8.index
          val first :
            CamomileLibrary.Type.UTF8.t -> CamomileLibrary.Type.UTF8.index
          val last :
            CamomileLibrary.Type.UTF8.t -> CamomileLibrary.Type.UTF8.index
          val look :
            CamomileLibrary.Type.UTF8.t ->
            CamomileLibrary.Type.UTF8.index -> CamomileLibrary.Type.UChar.t
          val out_of_range :
            CamomileLibrary.Type.UTF8.t ->
            CamomileLibrary.Type.UTF8.index -> bool
          val compare_index :
            CamomileLibrary.Type.UTF8.t ->
            CamomileLibrary.Type.UTF8.index ->
            CamomileLibrary.Type.UTF8.index -> int
          val next :
            CamomileLibrary.Type.UTF8.t ->
            CamomileLibrary.Type.UTF8.index ->
            CamomileLibrary.Type.UTF8.index
          val prev :
            CamomileLibrary.Type.UTF8.t ->
            CamomileLibrary.Type.UTF8.index ->
            CamomileLibrary.Type.UTF8.index
          val move :
            CamomileLibrary.Type.UTF8.t ->
            CamomileLibrary.Type.UTF8.index ->
            int -> CamomileLibrary.Type.UTF8.index
          val iter :
            (CamomileLibrary.Type.UChar.t -> unit) ->
            CamomileLibrary.Type.UTF8.t -> unit
          val compare :
            CamomileLibrary.Type.UTF8.t -> CamomileLibrary.Type.UTF8.t -> int
          module Buf :
            sig
              type buf = Buffer.t
              val create : int -> CamomileLibrary.Type.UTF8.Buf.buf
              val contents :
                CamomileLibrary.Type.UTF8.Buf.buf ->
                CamomileLibrary.Type.UTF8.t
              val clear : CamomileLibrary.Type.UTF8.Buf.buf -> unit
              val reset : CamomileLibrary.Type.UTF8.Buf.buf -> unit
              val add_char :
                CamomileLibrary.Type.UTF8.Buf.buf ->
                CamomileLibrary.Type.UChar.t -> unit
              val add_string :
                CamomileLibrary.Type.UTF8.Buf.buf ->
                CamomileLibrary.Type.UTF8.t -> unit
              val add_buffer :
                CamomileLibrary.Type.UTF8.Buf.buf ->
                CamomileLibrary.Type.UTF8.Buf.buf -> unit
            end
        end
      module UTF16 :
        sig
          type t =
              (int, Bigarray.int16_unsigned_elt, Bigarray.c_layout)
              Bigarray.Array1.t
          exception Malformed_code
          val validate : CamomileLibrary.Type.UTF16.t -> unit
          val get :
            CamomileLibrary.Type.UTF16.t ->
            int -> CamomileLibrary.Type.UChar.t
          exception Out_of_range
          val init :
            int ->
            (int -> CamomileLibrary.Type.UChar.t) ->
            CamomileLibrary.Type.UTF16.t
          val length : CamomileLibrary.Type.UTF16.t -> int
          type index = int
          val nth :
            CamomileLibrary.Type.UTF16.t ->
            int -> CamomileLibrary.Type.UTF16.index
          val first :
            CamomileLibrary.Type.UTF16.t -> CamomileLibrary.Type.UTF16.index
          val last :
            CamomileLibrary.Type.UTF16.t -> CamomileLibrary.Type.UTF16.index
          val look :
            CamomileLibrary.Type.UTF16.t ->
            CamomileLibrary.Type.UTF16.index -> CamomileLibrary.Type.UChar.t
          val out_of_range :
            CamomileLibrary.Type.UTF16.t ->
            CamomileLibrary.Type.UTF16.index -> bool
          val compare_index :
            CamomileLibrary.Type.UTF16.t ->
            CamomileLibrary.Type.UTF16.index ->
            CamomileLibrary.Type.UTF16.index -> int
          val next :
            CamomileLibrary.Type.UTF16.t ->
            CamomileLibrary.Type.UTF16.index ->
            CamomileLibrary.Type.UTF16.index
          val prev :
            CamomileLibrary.Type.UTF16.t ->
            CamomileLibrary.Type.UTF16.index ->
            CamomileLibrary.Type.UTF16.index
          val move :
            CamomileLibrary.Type.UTF16.t ->
            CamomileLibrary.Type.UTF16.index ->
            int -> CamomileLibrary.Type.UTF16.index
          val iter :
            (CamomileLibrary.Type.UChar.t -> unit) ->
            CamomileLibrary.Type.UTF16.t -> unit
          val compare :
            CamomileLibrary.Type.UTF16.t ->
            CamomileLibrary.Type.UTF16.t -> int
          module Buf :
            sig
              type buf
              val create : int -> CamomileLibrary.Type.UTF16.Buf.buf
              val contents :
                CamomileLibrary.Type.UTF16.Buf.buf ->
                CamomileLibrary.Type.UTF16.t
              val clear : CamomileLibrary.Type.UTF16.Buf.buf -> unit
              val reset : CamomileLibrary.Type.UTF16.Buf.buf -> unit
              val add_char :
                CamomileLibrary.Type.UTF16.Buf.buf ->
                CamomileLibrary.Type.UChar.t -> unit
              val add_string :
                CamomileLibrary.Type.UTF16.Buf.buf ->
                CamomileLibrary.Type.UTF16.t -> unit
              val add_buffer :
                CamomileLibrary.Type.UTF16.Buf.buf ->
                CamomileLibrary.Type.UTF16.Buf.buf -> unit
            end
        end
      module UCS4 :
        sig
          type t =
              (int32, Bigarray.int32_elt, Bigarray.c_layout)
              Bigarray.Array1.t
          exception Malformed_code
          val validate : CamomileLibrary.Type.UCS4.t -> unit
          val get :
            CamomileLibrary.Type.UCS4.t ->
            int -> CamomileLibrary.Type.UChar.t
          val init :
            int ->
            (int -> CamomileLibrary.Type.UChar.t) ->
            CamomileLibrary.Type.UCS4.t
          val length : CamomileLibrary.Type.UCS4.t -> int
          type index = int
          val nth :
            CamomileLibrary.Type.UCS4.t ->
            int -> CamomileLibrary.Type.UCS4.index
          val first :
            CamomileLibrary.Type.UCS4.t -> CamomileLibrary.Type.UCS4.index
          val last :
            CamomileLibrary.Type.UCS4.t -> CamomileLibrary.Type.UCS4.index
          val look :
            CamomileLibrary.Type.UCS4.t ->
            CamomileLibrary.Type.UCS4.index -> CamomileLibrary.Type.UChar.t
          val out_of_range :
            CamomileLibrary.Type.UCS4.t ->
            CamomileLibrary.Type.UCS4.index -> bool
          val compare_index :
            CamomileLibrary.Type.UCS4.t ->
            CamomileLibrary.Type.UCS4.index ->
            CamomileLibrary.Type.UCS4.index -> int
          val next :
            CamomileLibrary.Type.UCS4.t ->
            CamomileLibrary.Type.UCS4.index ->
            CamomileLibrary.Type.UCS4.index
          val prev :
            CamomileLibrary.Type.UCS4.t ->
            CamomileLibrary.Type.UCS4.index ->
            CamomileLibrary.Type.UCS4.index
          val move :
            CamomileLibrary.Type.UCS4.t ->
            CamomileLibrary.Type.UCS4.index ->
            int -> CamomileLibrary.Type.UCS4.index
          val iter :
            (CamomileLibrary.Type.UChar.t -> unit) ->
            CamomileLibrary.Type.UCS4.t -> unit
          val compare :
            CamomileLibrary.Type.UCS4.t -> CamomileLibrary.Type.UCS4.t -> int
          module Buf :
            sig
              type buf
              val create : int -> CamomileLibrary.Type.UCS4.Buf.buf
              val contents :
                CamomileLibrary.Type.UCS4.Buf.buf ->
                CamomileLibrary.Type.UCS4.t
              val clear : CamomileLibrary.Type.UCS4.Buf.buf -> unit
              val reset : CamomileLibrary.Type.UCS4.Buf.buf -> unit
              val add_char :
                CamomileLibrary.Type.UCS4.Buf.buf ->
                CamomileLibrary.Type.UChar.t -> unit
              val add_string :
                CamomileLibrary.Type.UCS4.Buf.buf ->
                CamomileLibrary.Type.UCS4.t -> unit
              val add_buffer :
                CamomileLibrary.Type.UCS4.Buf.buf ->
                CamomileLibrary.Type.UCS4.Buf.buf -> unit
            end
        end
      module UPervasives :
        sig
          type uchar = CamomileLibrary.Type.UChar.t
          val int_of_uchar : CamomileLibrary.Type.UPervasives.uchar -> int
          val uchar_of_int : int -> CamomileLibrary.Type.UPervasives.uchar
          val escaped_uchar :
            CamomileLibrary.Type.UPervasives.uchar -> string
          val escaped_utf8 : string -> string
          val printer_utf8 : Format.formatter -> string -> unit
          val printer_uchar :
            Format.formatter ->
            CamomileLibrary.Type.UPervasives.uchar -> unit
        end
      module URe :
        sig
          type regexp =
              [ `After of CamomileLibrary.Type.URe.regexp
              | `Alt of
                  CamomileLibrary.Type.URe.regexp *
                  CamomileLibrary.Type.URe.regexp
              | `Before of CamomileLibrary.Type.URe.regexp
              | `BoS
              | `EoS
              | `Epsilon
              | `Group of CamomileLibrary.Type.URe.regexp
              | `OneChar
              | `Rep of CamomileLibrary.Type.URe.regexp
              | `Repn of CamomileLibrary.Type.URe.regexp * int * int option
              | `Seq of
                  CamomileLibrary.Type.URe.regexp *
                  CamomileLibrary.Type.URe.regexp
              | `Set of CamomileLibrary.Type.USet.t
              | `String of CamomileLibrary.Type.UChar.t list ]
          type match_semantics = [ `First | `Longest | `Shortest ]
          val no_group :
            CamomileLibrary.Type.URe.regexp ->
            CamomileLibrary.Type.URe.regexp
          module type Type =
            sig
              type text
              type index
              type compiled_regexp
              module SubText :
                sig
                  type t
                  val get : t -> int -> UChar.t
                  val init : int -> (int -> UChar.t) -> t
                  val length : t -> int
                  type index
                  val look : t -> index -> UChar.t
                  val nth : t -> int -> index
                  val first : t -> index
                  val last : t -> index
                  val next : t -> index -> index
                  val prev : t -> index -> index
                  val move : t -> index -> int -> index
                  val out_of_range : t -> index -> bool
                  val compare_index : t -> index -> index -> int
                  val iter : (UChar.t -> unit) -> t -> unit
                  val compare : t -> t -> int
                  module Buf :
                    sig
                      type buf
                      val create : int -> buf
                      val contents : buf -> t
                      val clear : buf -> unit
                      val reset : buf -> unit
                      val add_char : buf -> UChar.t -> unit
                      val add_string : buf -> t -> unit
                      val add_buffer : buf -> buf -> unit
                    end
                  type ur_text = text
                  type ur_index = index
                  val refer : ur_text -> ur_index -> ur_index -> t
                  val excerpt : t -> ur_text
                  val context : t -> ur_text * ur_index * ur_index
                  val ur_index_of : t -> index -> ur_index
                end
              val compile :
                CamomileLibrary.Type.URe.regexp ->
                CamomileLibrary.Type.URe.Type.compiled_regexp
              val regexp_match :
                ?sem:CamomileLibrary.Type.URe.match_semantics ->
                CamomileLibrary.Type.URe.Type.compiled_regexp ->
                CamomileLibrary.Type.URe.Type.text ->
                CamomileLibrary.Type.URe.Type.index ->
                CamomileLibrary.Type.URe.Type.SubText.t option array option
              val string_match :
                CamomileLibrary.Type.URe.Type.compiled_regexp ->
                CamomileLibrary.Type.URe.Type.text ->
                CamomileLibrary.Type.URe.Type.index -> bool
              val search_forward :
                ?sem:CamomileLibrary.Type.URe.match_semantics ->
                CamomileLibrary.Type.URe.Type.compiled_regexp ->
                CamomileLibrary.Type.URe.Type.text ->
                CamomileLibrary.Type.URe.Type.index ->
                CamomileLibrary.Type.URe.Type.SubText.t option array option
            end
          module Make :
            functor (Text : UnicodeString.Type->
              sig
                type text = Text.t
                type index = Text.index
                type compiled_regexp
                module SubText :
                  sig
                    type t
                    val get : t -> int -> UChar.t
                    val init : int -> (int -> UChar.t) -> t
                    val length : t -> int
                    type index
                    val look : t -> index -> UChar.t
                    val nth : t -> int -> index
                    val first : t -> index
                    val last : t -> index
                    val next : t -> index -> index
                    val prev : t -> index -> index
                    val move : t -> index -> int -> index
                    val out_of_range : t -> index -> bool
                    val compare_index : t -> index -> index -> int
                    val iter : (UChar.t -> unit) -> t -> unit
                    val compare : t -> t -> int
                    module Buf :
                      sig
                        type buf
                        val create : int -> buf
                        val contents : buf -> t
                        val clear : buf -> unit
                        val reset : buf -> unit
                        val add_char : buf -> UChar.t -> unit
                        val add_string : buf -> t -> unit
                        val add_buffer : buf -> buf -> unit
                      end
                    type ur_text = text
                    type ur_index = index
                    val refer : ur_text -> ur_index -> ur_index -> t
                    val excerpt : t -> ur_text
                    val context : t -> ur_text * ur_index * ur_index
                    val ur_index_of : t -> index -> ur_index
                  end
                val compile : regexp -> compiled_regexp
                val regexp_match :
                  ?sem:match_semantics ->
                  compiled_regexp ->
                  text -> index -> SubText.t option array option
                val string_match : compiled_regexp -> text -> index -> bool
                val search_forward :
                  ?sem:match_semantics ->
                  compiled_regexp ->
                  text -> index -> SubText.t option array option
              end
        end
      module UCharInfo : UCharInfo.Type
      module UNF :
        sig
          module type Type = UNF.Type
          module Make :
            functor (Text : UnicodeString.Type->
              sig
                type text = Text.t
                class nfd :
                  UChar.t #OOChannel.obj_output_channel ->
                  [UChar.t] OOChannel.obj_output_channel
                class nfc :
                  UChar.t #OOChannel.obj_output_channel ->
                  [UChar.t] OOChannel.obj_output_channel
                class nfkd :
                  UChar.t #OOChannel.obj_output_channel ->
                  [UChar.t] OOChannel.obj_output_channel
                class nfkc :
                  UChar.t #OOChannel.obj_output_channel ->
                  [UChar.t] OOChannel.obj_output_channel
                val nfd : text -> text
                val nfkd : text -> text
                val nfc : text -> text
                val nfkc : text -> text
                module NFCBuf :
                  sig
                    type buf
                    val create : int -> buf
                    val contents : buf -> text
                    val clear : buf -> unit
                    val reset : buf -> unit
                    val add_char : buf -> UChar.t -> unit
                    val add_string : buf -> text -> unit
                    val add_buffer : buf -> buf -> unit
                  end
                val nfc_append : text -> text -> text
                val put_nfd : XString.t -> text -> unit
                val put_nfkd : XString.t -> text -> unit
                val put_nfc : XString.t -> text -> unit
                val put_nfkc : XString.t -> text -> unit
                type index = Text.index
                val nfd_inc :
                  text ->
                  index ->
                  ([ `Inc of UChar.t list * index * 'a lazy_t ] as 'a)
                val canon_compare : text -> text -> int
                val nfd_decompose : UChar.t -> UChar.t list
                val nfkd_decompose : UChar.t -> UChar.t list
              end
        end
      module UCol :
        sig
          type variable_option =
              [ `Blanked | `Non_ignorable | `Shift_Trimmed | `Shifted ]
          type precision =
              [ `Primary | `Quaternary | `Secondary | `Tertiary ]
          module type Type = UCol.Type
          module Make :
            functor (Text : UnicodeString.Type->
              sig
                type text = Text.t
                type index = Text.index
                val compare :
                  ?locale:string ->
                  ?prec:UCol.precision ->
                  ?variable:UCol.variable_option -> text -> text -> int
                val sort_key :
                  ?locale:string ->
                  ?prec:UCol.precision ->
                  ?variable:UCol.variable_option -> text -> string
                val compare_with_key :
                  ?locale:string ->
                  ?prec:UCol.precision ->
                  ?variable:UCol.variable_option -> string -> text -> int
                val search_with_key :
                  ?locale:string ->
                  ?prec:UCol.precision ->
                  ?variable:UCol.variable_option ->
                  string -> text -> index -> index * index
                val search :
                  ?locale:string ->
                  ?prec:UCol.precision ->
                  ?variable:UCol.variable_option ->
                  text -> text -> index -> index * index
              end
        end
      module CaseMap :
        sig
          module type Type = CaseMap.Type
          module Make :
            functor (Text : UnicodeString.Type->
              sig
                type text = Text.t
                val lowercase : ?locale:string -> text -> text
                val uppercase : ?locale:string -> text -> text
                val titlecase : ?locale:string -> text -> text
                val casefolding : text -> text
                val compare_caseless : text -> text -> int
              end
        end
      module UReStr : UReStr.Interface
      module StringPrep :
        sig
          module type Type = StringPrep.Type
          module Make :
            functor (Text : UnicodeString.Type->
              sig
                type text = Text.t
                exception Prohibited of UChar.t
                exception Bad_bidi
                type profile =
                    [ `Iscsi
                    | `Mib
                    | `Nameprep
                    | `Nodeprep
                    | `Resourceprep
                    | `Saslprep
                    | `Trace ]
                val stringprep : profile -> text -> text
              end
        end
    end
  module Make :
    functor (Config : ConfigInt.Type->
      sig
        module OOChannel :
          sig
            class type ['a] obj_input_channel =
              object
                method close_in : unit -> unit
                method get : unit -> 'a
              end
            class type ['a] obj_output_channel =
              object
                method close_out : unit -> unit
                method flush : unit -> unit
                method put : '-> unit
              end
            class ['a] channel_of_stream :
              'Stream.t -> ['a] obj_input_channel
            val stream_of_channel : '#obj_input_channel -> 'Stream.t
            class type char_input_channel =
              object
                method close_in : unit -> unit
                method input : string -> int -> int -> int
              end
            class type char_output_channel =
              object
                method close_out : unit -> unit
                method flush : unit -> unit
                method output : string -> int -> int -> int
              end
            class char_input_channel_of :
              char #obj_input_channel -> char_input_channel
            class char_obj_input_channel_of :
              char_input_channel -> [char] obj_input_channel
            class char_output_channel_of :
              char #obj_output_channel -> char_output_channel
            class char_obj_output_channel_of :
              char_output_channel -> [char] obj_output_channel
            class of_in_channel : in_channel -> char_input_channel
            class of_out_channel : out_channel -> char_output_channel
          end
        module UChar :
          sig
            type t = UChar.t
            exception Out_of_range
            val char_of : t -> char
            val of_char : char -> t
            val code : t -> int
            val chr : int -> t
            external uint_code : t -> int = "%identity"
            val chr_of_uint : int -> t
            val eq : t -> t -> bool
            val compare : t -> t -> int
            type uchar = t
            val int_of : uchar -> int
            val of_int : int -> uchar
          end
        module USet :
          sig
            type t = USet.t
            val empty : t
            val is_empty : t -> bool
            val mem : UChar.t -> t -> bool
            val add : UChar.t -> t -> t
            val add_range : UChar.t -> UChar.t -> t -> t
            val singleton : UChar.t -> t
            val remove : UChar.t -> t -> t
            val remove_range : UChar.t -> UChar.t -> t -> t
            val union : t -> t -> t
            val inter : t -> t -> t
            val diff : t -> t -> t
            val compl : t -> t
            val compare : t -> t -> int
            val equal : t -> t -> bool
            val subset : t -> t -> bool
            val from : UChar.t -> t -> t
            val after : UChar.t -> t -> t
            val until : UChar.t -> t -> t
            val before : UChar.t -> t -> t
            val iter : (UChar.t -> unit) -> t -> unit
            val iter_range : (UChar.t -> UChar.t -> unit) -> t -> unit
            val fold : (UChar.t -> '-> 'a) -> t -> '-> 'a
            val fold_range :
              (UChar.t -> UChar.t -> '-> 'a) -> t -> '-> 'a
            val for_all : (UChar.t -> bool) -> t -> bool
            val exists : (UChar.t -> bool) -> t -> bool
            val filter : (UChar.t -> bool) -> t -> t
            val partition : (UChar.t -> bool) -> t -> t * t
            val cardinal : t -> int
            val elements : t -> UChar.t list
            val ranges : t -> (UChar.t * UChar.t) list
            val min_elt : t -> UChar.t
            val max_elt : t -> UChar.t
            val choose : t -> UChar.t
            val uset_of_iset : ISet.t -> t
            val iset_of_uset : t -> ISet.t
          end
        module UMap :
          sig
            type 'a t = 'UMap.t
            val empty : 'a t
            val is_empty : 'a t -> bool
            val add : ?eq:('-> '-> bool) -> UChar.t -> '-> 'a t -> 'a t
            val add_range :
              ?eq:('-> '-> bool) ->
              UChar.t -> UChar.t -> '-> 'a t -> 'a t
            val find : UChar.t -> 'a t -> 'a
            val remove : UChar.t -> 'a t -> 'a t
            val remove_range : UChar.t -> UChar.t -> 'a t -> 'a t
            val from : UChar.t -> 'a t -> 'a t
            val after : UChar.t -> 'a t -> 'a t
            val until : UChar.t -> 'a t -> 'a t
            val before : UChar.t -> 'a t -> 'a t
            val mem : UChar.t -> 'a t -> bool
            val iter : (UChar.t -> '-> unit) -> 'a t -> unit
            val iter_range :
              (UChar.t -> UChar.t -> '-> unit) -> 'a t -> unit
            val map : ?eq:('-> '-> bool) -> ('-> 'a) -> 'b t -> 'a t
            val mapi :
              ?eq:('-> '-> bool) -> (UChar.t -> '-> 'a) -> 'b t -> 'a t
            val fold : (UChar.t -> '-> '-> 'b) -> 'a t -> '-> 'b
            val fold_range :
              (UChar.t -> UChar.t -> '-> '-> 'b) -> 'a t -> '-> 'b
            val set_to_map : USet.t -> '-> 'a t
            val domain : 'a t -> USet.t
            val map_to_set : ('-> bool) -> 'a t -> USet.t
            val umap_of_imap : 'IMap.t -> 'a t
            val imap_of_umap : 'a t -> 'IMap.t
          end
        module UCharTbl :
          sig
            type 'a tbl = 'UCharTbl.tbl
            type 'a t = 'a tbl
            val get : 'a tbl -> UChar.t -> 'a
            module type Type =
              sig
                type elt
                type t = elt tbl
                val get : elt tbl -> UChar.t -> elt
                val of_map : elt -> elt UMap.t -> t
              end
            module Make :
              functor (H : Hashtbl.HashedType->
                sig
                  type elt = H.t
                  type t = elt tbl
                  val get : elt tbl -> UChar.t -> elt
                  val of_map : elt -> elt UMap.t -> t
                end
            module Bool :
              sig
                type t = UCharTbl.Bool.t
                val get : t -> UChar.t -> bool
                val of_set : USet.t -> t
              end
            module Bits :
              sig
                type t = UCharTbl.Bits.t
                val of_map : int -> int UMap.t -> t
                val get : t -> UChar.t -> int
              end
            module Bytes :
              sig
                type t = UCharTbl.Bytes.t
                val of_map : int -> int UMap.t -> t
                val get : t -> UChar.t -> int
              end
            module Char :
              sig
                type t = UCharTbl.Char.t
                val of_map : char -> char UMap.t -> t
                val get : t -> UChar.t -> char
              end
          end
        module UnicodeString :
          sig
            module type Type =
              sig
                type t
                val get : t -> int -> UChar.t
                val init : int -> (int -> UChar.t) -> t
                val length : t -> int
                type index
                val look : t -> index -> UChar.t
                val nth : t -> int -> index
                val next : t -> index -> index
                val prev : t -> index -> index
                val out_of_range : t -> index -> bool
                val iter : (UChar.t -> unit) -> t -> unit
                val compare : t -> t -> int
                val first : t -> index
                val last : t -> index
                val move : t -> index -> int -> index
                val compare_index : t -> index -> index -> int
                module Buf :
                  sig
                    type buf
                    val create : int -> buf
                    val contents : buf -> t
                    val clear : buf -> unit
                    val reset : buf -> unit
                    val add_char : buf -> UChar.t -> unit
                    val add_string : buf -> t -> unit
                    val add_buffer : buf -> buf -> unit
                  end
              end
          end
        module UText :
          sig
            type mutability = [ `Immutable | `Mutable ]
            type 'a text = 'UText.text
            type utext = [ `Immutable ] text
            type ustring = [ `Mutable ] text
            type t = utext
            val utext_of_ustring : ustring -> utext
            val ustring_of_utext : utext -> ustring
            val get : 'a text -> int -> UChar.t
            val set : ustring -> int -> UChar.t -> unit
            type index = UText.index
            val look : 'a text -> index -> UChar.t
            val nth : 'a text -> int -> index
            val first : 'a text -> index
            val last : 'a text -> index
            val out_of_range : 'a text -> index -> bool
            val compare_index : 'a text -> index -> index -> int
            val next : 'a text -> index -> index
            val prev : 'a text -> index -> index
            val move : 'a text -> index -> int -> index
            val length : 'a text -> int
            val of_string : string -> utext
            val init : int -> (int -> UChar.t) -> utext
            val init_ustring : int -> (int -> UChar.t) -> ustring
            val make : int -> UChar.t -> ustring
            val copy : ustring -> ustring
            val sub : 'a text -> int -> int -> 'a text
            val fill : ustring -> int -> int -> UChar.t -> unit
            val blit : 'a text -> int -> ustring -> int -> int -> unit
            val append : 'a text -> 'b text -> 'a text
            val iter : (UChar.t -> unit) -> 'a text -> unit
            val compare : 'a text -> 'b text -> int
            module Buf :
              sig
                type buf = UText.Buf.buf
                val create : int -> buf
                val contents : buf -> t
                val contents_string : buf -> ustring
                val length : buf -> int
                val clear : buf -> unit
                val reset : buf -> unit
                val add_char : buf -> UChar.t -> unit
                val add_string : buf -> 'a text -> unit
                val add_buffer : buf -> buf -> unit
              end
          end
        module XString :
          sig
            type xstring = XString.xstring
            type t = xstring
            val get : xstring -> int -> UChar.t
            val set : xstring -> int -> UChar.t -> unit
            val length : xstring -> int
            val init : int -> (int -> UChar.t) -> xstring
            type index = XString.index
            val look : xstring -> index -> UChar.t
            val nth : xstring -> int -> index
            val first : xstring -> index
            val last : xstring -> index
            val out_of_range : xstring -> index -> bool
            val next : xstring -> index -> index
            val prev : xstring -> index -> index
            val move : xstring -> index -> int -> index
            val compare_index : xstring -> index -> index -> int
            val make : ?bufsize:int -> int -> UChar.t -> xstring
            val clear : xstring -> unit
            val reset : xstring -> unit
            val copy : xstring -> xstring
            val sub : xstring -> int -> int -> xstring
            val add_char : xstring -> UChar.t -> unit
            val add_text : xstring -> 'UText.text -> unit
            val add_xstring : xstring -> xstring -> unit
            val shrink : xstring -> int -> unit
            val append : xstring -> xstring -> xstring
            val utext_of : xstring -> UText.t
            val ustring_of : xstring -> UText.ustring
            val iter : (UChar.t -> unit) -> xstring -> unit
            val compare : t -> t -> int
            module Buf :
              sig
                type buf = XString.Buf.buf
                val create : int -> buf
                val contents : buf -> t
                val length : buf -> int
                val clear : buf -> unit
                val reset : buf -> unit
                val add_char : buf -> UChar.t -> unit
                val add_string : buf -> t -> unit
                val add_buffer : buf -> buf -> unit
              end
          end
        module SubText :
          sig
            module type Type =
              sig
                type t
                val get : t -> int -> UChar.t
                val init : int -> (int -> UChar.t) -> t
                val length : t -> int
                type index
                val look : t -> index -> UChar.t
                val nth : t -> int -> index
                val first : t -> index
                val last : t -> index
                val next : t -> index -> index
                val prev : t -> index -> index
                val move : t -> index -> int -> index
                val out_of_range : t -> index -> bool
                val compare_index : t -> index -> index -> int
                val iter : (UChar.t -> unit) -> t -> unit
                val compare : t -> t -> int
                module Buf :
                  sig
                    type buf
                    val create : int -> buf
                    val contents : buf -> t
                    val clear : buf -> unit
                    val reset : buf -> unit
                    val add_char : buf -> UChar.t -> unit
                    val add_string : buf -> t -> unit
                    val add_buffer : buf -> buf -> unit
                  end
                type ur_text
                type ur_index
                val refer : ur_text -> ur_index -> ur_index -> t
                val excerpt : t -> ur_text
                val context : t -> ur_text * ur_index * ur_index
                val ur_index_of : t -> index -> ur_index
              end
            module Make :
              functor (Text : UnicodeString.Type->
                sig
                  type t = SubText.Make(Text).t
                  val get : t -> int -> UChar.t
                  val init : int -> (int -> UChar.t) -> t
                  val length : t -> int
                  type index = SubText.Make(Text).index
                  val look : t -> index -> UChar.t
                  val nth : t -> int -> index
                  val first : t -> index
                  val last : t -> index
                  val next : t -> index -> index
                  val prev : t -> index -> index
                  val move : t -> index -> int -> index
                  val out_of_range : t -> index -> bool
                  val compare_index : t -> index -> index -> int
                  val iter : (UChar.t -> unit) -> t -> unit
                  val compare : t -> t -> int
                  module Buf :
                    sig
                      type buf = SubText.Make(Text).Buf.buf
                      val create : int -> buf
                      val contents : buf -> t
                      val clear : buf -> unit
                      val reset : buf -> unit
                      val add_char : buf -> UChar.t -> unit
                      val add_string : buf -> t -> unit
                      val add_buffer : buf -> buf -> unit
                    end
                  type ur_text = Text.t
                  type ur_index = Text.index
                  val refer : ur_text -> ur_index -> ur_index -> t
                  val excerpt : t -> ur_text
                  val context : t -> ur_text * ur_index * ur_index
                  val ur_index_of : t -> index -> ur_index
                end
          end
        module ULine :
          sig
            type separator = [ `CR | `CRLF | `LF | `LS | `NEL | `PS ]
            class input :
              separator ->
              UChar.t #OOChannel.obj_input_channel ->
              [UChar.t] OOChannel.obj_input_channel
            class output :
              separator ->
              UChar.t #OOChannel.obj_output_channel ->
              [UChar.t] OOChannel.obj_output_channel
            module type Type =
              sig
                type text
                class input_line :
                  UChar.t #OOChannel.obj_input_channel ->
                  [text] OOChannel.obj_input_channel
                class output_line :
                  ?sp:separator ->
                  UChar.t #OOChannel.obj_output_channel ->
                  [text] OOChannel.obj_output_channel
              end
            module Make :
              functor (Text : UnicodeString.Type->
                sig
                  type text = Text.t
                  class input_line :
                    UChar.t #OOChannel.obj_input_channel ->
                    [text] OOChannel.obj_input_channel
                  class output_line :
                    ?sp:separator ->
                    UChar.t #OOChannel.obj_output_channel ->
                    [text] OOChannel.obj_output_channel
                end
          end
        module Locale :
          sig
            type t = string
            val read : string -> string -> (in_channel -> 'a) -> string -> 'a
            val contain : string -> string -> bool
          end
        module CharEncoding :
          sig
            exception Malformed_code
            exception Out_of_range
            type t = CharEncoding.Configure(Config).t
            val automatic : string -> t list -> t -> t
            val new_enc : string -> t -> unit
            val alias : string -> string -> unit
            val of_name : string -> t
            val name_of : t -> string
            val ascii : t
            val latin1 : t
            val utf8 : t
            val utf16 : t
            val utf16be : t
            val utf16le : t
            val utf32 : t
            val utf32be : t
            val utf32le : t
            val ucs4 : t
            val recode_string : in_enc:t -> out_enc:t -> string -> string
            class uchar_input_channel_of :
              t ->
              OOChannel.char_input_channel ->
              [UChar.t] OOChannel.obj_input_channel
            class uchar_output_channel_of :
              t ->
              OOChannel.char_output_channel ->
              [UChar.t] OOChannel.obj_output_channel
            class convert_uchar_input :
              t ->
              UChar.t OOChannel.obj_input_channel ->
              OOChannel.char_input_channel
            class convert_uchar_output :
              t ->
              UChar.t OOChannel.obj_output_channel ->
              OOChannel.char_output_channel
            class convert_input :
              in_enc:t ->
              out_enc:t ->
              OOChannel.char_input_channel -> OOChannel.char_input_channel
            class convert_output :
              in_enc:t ->
              out_enc:t ->
              OOChannel.char_output_channel -> OOChannel.char_output_channel
            class out_channel :
              t -> out_channel -> [UChar.t] OOChannel.obj_output_channel
            class in_channel :
              t -> in_channel -> [UChar.t] OOChannel.obj_input_channel
            val ustream_of : t -> char Stream.t -> UChar.t Stream.t
            val char_stream_of : t -> UChar.t Stream.t -> char Stream.t
            module type Type =
              sig
                type text
                val decode : t -> string -> text
                val encode : t -> text -> string
              end
            module Make :
              functor (Text : UnicodeString.Type->
                sig
                  type text = Text.t
                  val decode : t -> string -> text
                  val encode : t -> text -> string
                end
          end
        module UTF8 :
          sig
            type t = string
            exception Malformed_code
            val validate : t -> unit
            val get : t -> int -> UChar.t
            val init : int -> (int -> UChar.t) -> t
            val length : t -> int
            type index = int
            val nth : t -> int -> index
            val first : t -> index
            val last : t -> index
            val look : t -> index -> UChar.t
            val out_of_range : t -> index -> bool
            val compare_index : t -> index -> index -> int
            val next : t -> index -> index
            val prev : t -> index -> index
            val move : t -> index -> int -> index
            val iter : (UChar.t -> unit) -> t -> unit
            val compare : t -> t -> int
            module Buf :
              sig
                type buf = Buffer.t
                val create : int -> buf
                val contents : buf -> t
                val clear : buf -> unit
                val reset : buf -> unit
                val add_char : buf -> UChar.t -> unit
                val add_string : buf -> t -> unit
                val add_buffer : buf -> buf -> unit
              end
          end
        module UTF16 :
          sig
            type t =
                (int, Bigarray.int16_unsigned_elt, Bigarray.c_layout)
                Bigarray.Array1.t
            exception Malformed_code
            val validate : t -> unit
            val get : t -> int -> UChar.t
            exception Out_of_range
            val init : int -> (int -> UChar.t) -> t
            val length : t -> int
            type index = int
            val nth : t -> int -> index
            val first : t -> index
            val last : t -> index
            val look : t -> index -> UChar.t
            val out_of_range : t -> index -> bool
            val compare_index : t -> index -> index -> int
            val next : t -> index -> index
            val prev : t -> index -> index
            val move : t -> index -> int -> index
            val iter : (UChar.t -> unit) -> t -> unit
            val compare : t -> t -> int
            module Buf :
              sig
                type buf = UTF16.Buf.buf
                val create : int -> buf
                val contents : buf -> t
                val clear : buf -> unit
                val reset : buf -> unit
                val add_char : buf -> UChar.t -> unit
                val add_string : buf -> t -> unit
                val add_buffer : buf -> buf -> unit
              end
          end
        module UCS4 :
          sig
            type t =
                (int32, Bigarray.int32_elt, Bigarray.c_layout)
                Bigarray.Array1.t
            exception Malformed_code
            val validate : t -> unit
            val get : t -> int -> UChar.t
            val init : int -> (int -> UChar.t) -> t
            val length : t -> int
            type index = int
            val nth : t -> int -> index
            val first : t -> index
            val last : t -> index
            val look : t -> index -> UChar.t
            val out_of_range : t -> index -> bool
            val compare_index : t -> index -> index -> int
            val next : t -> index -> index
            val prev : t -> index -> index
            val move : t -> index -> int -> index
            val iter : (UChar.t -> unit) -> t -> unit
            val compare : t -> t -> int
            module Buf :
              sig
                type buf = UCS4.Buf.buf
                val create : int -> buf
                val contents : buf -> t
                val clear : buf -> unit
                val reset : buf -> unit
                val add_char : buf -> UChar.t -> unit
                val add_string : buf -> t -> unit
                val add_buffer : buf -> buf -> unit
              end
          end
        module UPervasives :
          sig
            type uchar = UChar.t
            val int_of_uchar : uchar -> int
            val uchar_of_int : int -> uchar
            val escaped_uchar : uchar -> string
            val escaped_utf8 : string -> string
            val printer_utf8 : Format.formatter -> string -> unit
            val printer_uchar : Format.formatter -> uchar -> unit
          end
        module URe :
          sig
            type regexp =
                [ `After of regexp
                | `Alt of regexp * regexp
                | `Before of regexp
                | `BoS
                | `EoS
                | `Epsilon
                | `Group of regexp
                | `OneChar
                | `Rep of regexp
                | `Repn of regexp * int * int option
                | `Seq of regexp * regexp
                | `Set of USet.t
                | `String of UChar.t list ]
            type match_semantics = [ `First | `Longest | `Shortest ]
            val no_group : regexp -> regexp
            module type Type =
              sig
                type text
                type index
                type compiled_regexp
                module SubText :
                  sig
                    type t
                    val get : t -> int -> UChar.t
                    val init : int -> (int -> UChar.t) -> t
                    val length : t -> int
                    type index
                    val look : t -> index -> UChar.t
                    val nth : t -> int -> index
                    val first : t -> index
                    val last : t -> index
                    val next : t -> index -> index
                    val prev : t -> index -> index
                    val move : t -> index -> int -> index
                    val out_of_range : t -> index -> bool
                    val compare_index : t -> index -> index -> int
                    val iter : (UChar.t -> unit) -> t -> unit
                    val compare : t -> t -> int
                    module Buf :
                      sig
                        type buf
                        val create : int -> buf
                        val contents : buf -> t
                        val clear : buf -> unit
                        val reset : buf -> unit
                        val add_char : buf -> UChar.t -> unit
                        val add_string : buf -> t -> unit
                        val add_buffer : buf -> buf -> unit
                      end
                    type ur_text = text
                    type ur_index = index
                    val refer : ur_text -> ur_index -> ur_index -> t
                    val excerpt : t -> ur_text
                    val context : t -> ur_text * ur_index * ur_index
                    val ur_index_of : t -> index -> ur_index
                  end
                val compile : regexp -> compiled_regexp
                val regexp_match :
                  ?sem:match_semantics ->
                  compiled_regexp ->
                  text -> index -> SubText.t option array option
                val string_match : compiled_regexp -> text -> index -> bool
                val search_forward :
                  ?sem:match_semantics ->
                  compiled_regexp ->
                  text -> index -> SubText.t option array option
              end
            module Make :
              functor (Text : UnicodeString.Type->
                sig
                  type text = Text.t
                  type index = Text.index
                  type compiled_regexp = URe.Make(Text).compiled_regexp
                  module SubText :
                    sig
                      type t = URe.Make(Text).SubText.t
                      val get : t -> int -> UChar.t
                      val init : int -> (int -> UChar.t) -> t
                      val length : t -> int
                      type index = URe.Make(Text).SubText.index
                      val look : t -> index -> UChar.t
                      val nth : t -> int -> index
                      val first : t -> index
                      val last : t -> index
                      val next : t -> index -> index
                      val prev : t -> index -> index
                      val move : t -> index -> int -> index
                      val out_of_range : t -> index -> bool
                      val compare_index : t -> index -> index -> int
                      val iter : (UChar.t -> unit) -> t -> unit
                      val compare : t -> t -> int
                      module Buf :
                        sig
                          type buf = URe.Make(Text).SubText.Buf.buf
                          val create : int -> buf
                          val contents : buf -> t
                          val clear : buf -> unit
                          val reset : buf -> unit
                          val add_char : buf -> UChar.t -> unit
                          val add_string : buf -> t -> unit
                          val add_buffer : buf -> buf -> unit
                        end
                      type ur_text = text
                      type ur_index = index
                      val refer : ur_text -> ur_index -> ur_index -> t
                      val excerpt : t -> ur_text
                      val context : t -> ur_text * ur_index * ur_index
                      val ur_index_of : t -> index -> ur_index
                    end
                  val compile : regexp -> compiled_regexp
                  val regexp_match :
                    ?sem:match_semantics ->
                    compiled_regexp ->
                    text -> index -> SubText.t option array option
                  val string_match : compiled_regexp -> text -> index -> bool
                  val search_forward :
                    ?sem:match_semantics ->
                    compiled_regexp ->
                    text -> index -> SubText.t option array option
                end
          end
        module UCharInfo :
          sig
            type general_category_type =
                [ `Cc
                | `Cf
                | `Cn
                | `Co
                | `Cs
                | `Ll
                | `Lm
                | `Lo
                | `Lt
                | `Lu
                | `Mc
                | `Me
                | `Mn
                | `Nd
                | `Nl
                | `No
                | `Pc
                | `Pd
                | `Pe
                | `Pf
                | `Pi
                | `Po
                | `Ps
                | `Sc
                | `Sk
                | `Sm
                | `So
                | `Zl
                | `Zp
                | `Zs ]
            val general_category : UChar.t -> general_category_type
            val load_general_category_map :
              unit -> general_category_type UMap.t
            type character_property_type =
                [ `Alphabetic
                | `Ascii_Hex_Digit
                | `Bidi_Control
                | `Default_Ignorable_Code_Point
                | `Deprecated
                | `Diacritic
                | `Extender
                | `Grapheme_Base
                | `Grapheme_Extend
                | `Grapheme_Link
                | `Hex_Digit
                | `Hyphen
                | `IDS_Binary_Operator
                | `IDS_Trinary_Operator
                | `ID_Continue
                | `ID_Start
                | `Ideographic
                | `Logical_Order_Exception
                | `Lowercase
                | `Math
                | `Noncharacter_Code_Point
                | `Other_Alphabetic
                | `Other_Grapheme_Extend
                | `Other_Lowercase
                | `Other_Math
                | `Other_Uppercase
                | `Other_default_Ignorable_Code_Point
                | `Quotation_Mark
                | `Radical
                | `Soft_Dotted
                | `Terminal_Punctuation
                | `Unified_Ideograph
                | `Uppercase
                | `White_Space
                | `XID_Continue
                | `XID_Start ]
            val load_property_tbl :
              character_property_type -> UCharTbl.Bool.t
            val load_property_tbl_by_name : string -> UCharTbl.Bool.t
            val load_property_set : character_property_type -> USet.t
            val load_property_set_by_name : string -> USet.t
            type script_type =
                [ `Arabic
                | `Armenian
                | `Bengali
                | `Bopomofo
                | `Buhid
                | `Canadian_Aboriginal
                | `Cherokee
                | `Common
                | `Cyrillic
                | `Deseret
                | `Devanagari
                | `Ethiopic
                | `Georgian
                | `Gothic
                | `Greek
                | `Gujarati
                | `Gurmukhi
                | `Han
                | `Hangul
                | `Hanunoo
                | `Hebrew
                | `Hiragana
                | `Inherited
                | `Kannada
                | `Katakana
                | `Khmer
                | `Lao
                | `Latin
                | `Malayalam
                | `Mongolian
                | `Myanmar
                | `Ogham
                | `Old_Italic
                | `Oriya
                | `Runic
                | `Sinhala
                | `Syriac
                | `Tagalog
                | `Tagbanwa
                | `Tamil
                | `Telugu
                | `Thaana
                | `Thai
                | `Tibetan
                | `Yi ]
            val script : UChar.t -> script_type
            val load_script_map : unit -> script_type UMap.t
            type version_type =
                [ `Nc | `v1_0 | `v1_1 | `v2_0 | `v2_1 | `v3_0 | `v3_1 | `v3_2 ]
            val age : UChar.t -> version_type
            val older : version_type -> version_type -> bool
            val load_to_lower1_tbl : unit -> UChar.t UCharTbl.t
            val load_to_upper1_tbl : unit -> UChar.t UCharTbl.t
            val load_to_title1_tbl : unit -> UChar.t UCharTbl.t
            type casemap_condition =
                [ `AfterSoftDotted
                | `BeforeDot
                | `FinalSigma
                | `Locale of string
                | `MoreAbove
                | `Not of casemap_condition ]
            type special_casing_property =
              UCharInfo.Make(Config).special_casing_property = {
              lower : UChar.t list;
              title : UChar.t list;
              upper : UChar.t list;
              condition : casemap_condition list;
            }
            val load_conditional_casing_tbl :
              unit -> special_casing_property list UCharTbl.t
            val load_casefolding_tbl : unit -> UChar.t list UCharTbl.t
            val combined_class : UChar.t -> int
            type decomposition_type =
                [ `Canon
                | `Circle
                | `Compat
                | `Final
                | `Font
                | `Fraction
                | `Initial
                | `Isolated
                | `Medial
                | `Narrow
                | `NoBreak
                | `Small
                | `Square
                | `Sub
                | `Super
                | `Vertical
                | `Wide ]
            type decomposition_info =
                [ `Canonform
                | `Composite of decomposition_type * UChar.t list
                | `HangulSyllable ]
            val load_decomposition_tbl :
              unit -> decomposition_info UCharTbl.t
            val load_composition_tbl :
              unit -> (UChar.t * UChar.t) list UCharTbl.t
            val load_composition_exclusion_tbl : unit -> UCharTbl.Bool.t
          end
        module UNF :
          sig
            module type Type = UNF.Type
            module Make :
              functor (Text : UnicodeString.Type->
                sig
                  type text = Text.t
                  class nfd :
                    UChar.t #OOChannel.obj_output_channel ->
                    [UChar.t] OOChannel.obj_output_channel
                  class nfc :
                    UChar.t #OOChannel.obj_output_channel ->
                    [UChar.t] OOChannel.obj_output_channel
                  class nfkd :
                    UChar.t #OOChannel.obj_output_channel ->
                    [UChar.t] OOChannel.obj_output_channel
                  class nfkc :
                    UChar.t #OOChannel.obj_output_channel ->
                    [UChar.t] OOChannel.obj_output_channel
                  val nfd : text -> text
                  val nfkd : text -> text
                  val nfc : text -> text
                  val nfkc : text -> text
                  module NFCBuf :
                    sig
                      type buf = UNF.Make(Config)(Text).NFCBuf.buf
                      val create : int -> buf
                      val contents : buf -> text
                      val clear : buf -> unit
                      val reset : buf -> unit
                      val add_char : buf -> UChar.t -> unit
                      val add_string : buf -> text -> unit
                      val add_buffer : buf -> buf -> unit
                    end
                  val nfc_append : text -> text -> text
                  val put_nfd : XString.t -> text -> unit
                  val put_nfkd : XString.t -> text -> unit
                  val put_nfc : XString.t -> text -> unit
                  val put_nfkc : XString.t -> text -> unit
                  type index = Text.index
                  val nfd_inc :
                    text ->
                    index ->
                    ([ `Inc of UChar.t list * index * 'a lazy_t ] as 'a)
                  val canon_compare : text -> text -> int
                  val nfd_decompose : UChar.t -> UChar.t list
                  val nfkd_decompose : UChar.t -> UChar.t list
                end
          end
        module UCol :
          sig
            type variable_option =
                [ `Blanked | `Non_ignorable | `Shift_Trimmed | `Shifted ]
            type precision =
                [ `Primary | `Quaternary | `Secondary | `Tertiary ]
            module type Type = UCol.Type
            module Make :
              functor (Text : UnicodeString.Type->
                sig
                  type text = Text.t
                  type index = Text.index
                  val compare :
                    ?locale:string ->
                    ?prec:UCol.precision ->
                    ?variable:UCol.variable_option -> text -> text -> int
                  val sort_key :
                    ?locale:string ->
                    ?prec:UCol.precision ->
                    ?variable:UCol.variable_option -> text -> string
                  val compare_with_key :
                    ?locale:string ->
                    ?prec:UCol.precision ->
                    ?variable:UCol.variable_option -> string -> text -> int
                  val search_with_key :
                    ?locale:string ->
                    ?prec:UCol.precision ->
                    ?variable:UCol.variable_option ->
                    string -> text -> index -> index * index
                  val search :
                    ?locale:string ->
                    ?prec:UCol.precision ->
                    ?variable:UCol.variable_option ->
                    text -> text -> index -> index * index
                end
          end
        module CaseMap :
          sig
            module type Type = CaseMap.Type
            module Make :
              functor (Text : UnicodeString.Type->
                sig
                  type text = Text.t
                  val lowercase : ?locale:string -> text -> text
                  val uppercase : ?locale:string -> text -> text
                  val titlecase : ?locale:string -> text -> text
                  val casefolding : text -> text
                  val compare_caseless : text -> text -> int
                end
          end
        module UReStr :
          sig
            type regexp = URe.regexp
            val regexp : string -> regexp
            val quote : string -> string
            val regexp_string : string -> regexp
            module type Type =
              sig
                type text
                type index
                type compiled_regexp
                module SubText :
                  sig
                    type t
                    val get : t -> int -> UChar.t
                    val init : int -> (int -> UChar.t) -> t
                    val length : t -> int
                    type index
                    val look : t -> index -> UChar.t
                    val nth : t -> int -> index
                    val first : t -> index
                    val last : t -> index
                    val next : t -> index -> index
                    val prev : t -> index -> index
                    val move : t -> index -> int -> index
                    val out_of_range : t -> index -> bool
                    val compare_index : t -> index -> index -> int
                    val iter : (UChar.t -> unit) -> t -> unit
                    val compare : t -> t -> int
                    module Buf :
                      sig
                        type buf
                        val create : int -> buf
                        val contents : buf -> t
                        val clear : buf -> unit
                        val reset : buf -> unit
                        val add_char : buf -> UChar.t -> unit
                        val add_string : buf -> t -> unit
                        val add_buffer : buf -> buf -> unit
                      end
                    type ur_text = text
                    type ur_index = index
                    val refer : ur_text -> ur_index -> ur_index -> t
                    val excerpt : t -> ur_text
                    val context : t -> ur_text * ur_index * ur_index
                    val ur_index_of : t -> index -> ur_index
                  end
                val compile : regexp -> compiled_regexp
                val regexp_match :
                  ?sem:URe.match_semantics ->
                  compiled_regexp ->
                  text -> index -> SubText.t option array option
                val string_match : compiled_regexp -> text -> index -> bool
                val search_forward :
                  ?sem:URe.match_semantics ->
                  compiled_regexp ->
                  text -> index -> SubText.t option array option
              end
            module Make :
              functor (Text : UnicodeString.Type->
                sig
                  type text = Text.t
                  type index = Text.index
                  type compiled_regexp =
                      UReStr.Configure(Config).Make(Text).compiled_regexp
                  module SubText :
                    sig
                      type t = UReStr.Configure(Config).Make(Text).SubText.t
                      val get : t -> int -> UChar.t
                      val init : int -> (int -> UChar.t) -> t
                      val length : t -> int
                      type index =
                          UReStr.Configure(Config).Make(Text).SubText.index
                      val look : t -> index -> UChar.t
                      val nth : t -> int -> index
                      val first : t -> index
                      val last : t -> index
                      val next : t -> index -> index
                      val prev : t -> index -> index
                      val move : t -> index -> int -> index
                      val out_of_range : t -> index -> bool
                      val compare_index : t -> index -> index -> int
                      val iter : (UChar.t -> unit) -> t -> unit
                      val compare : t -> t -> int
                      module Buf :
                        sig
                          type buf =
                              UReStr.Configure(Config).Make(Text).SubText.Buf.buf
                          val create : int -> buf
                          val contents : buf -> t
                          val clear : buf -> unit
                          val reset : buf -> unit
                          val add_char : buf -> UChar.t -> unit
                          val add_string : buf -> t -> unit
                          val add_buffer : buf -> buf -> unit
                        end
                      type ur_text = text
                      type ur_index = index
                      val refer : ur_text -> ur_index -> ur_index -> t
                      val excerpt : t -> ur_text
                      val context : t -> ur_text * ur_index * ur_index
                      val ur_index_of : t -> index -> ur_index
                    end
                  val compile : regexp -> compiled_regexp
                  val regexp_match :
                    ?sem:URe.match_semantics ->
                    compiled_regexp ->
                    text -> index -> SubText.t option array option
                  val string_match : compiled_regexp -> text -> index -> bool
                  val search_forward :
                    ?sem:URe.match_semantics ->
                    compiled_regexp ->
                    text -> index -> SubText.t option array option
                end
          end
        module StringPrep :
          sig
            module type Type = StringPrep.Type
            module Make :
              functor (Text : UnicodeString.Type->
                sig
                  type text = Text.t
                  exception Prohibited of UChar.t
                  exception Bad_bidi
                  type profile =
                      [ `Iscsi
                      | `Mib
                      | `Nameprep
                      | `Nodeprep
                      | `Resourceprep
                      | `Saslprep
                      | `Trace ]
                  val stringprep : profile -> text -> text
                end
          end
      end
end