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) ->
        ('-> 'b) ->
        'CamomileLibrary.Type.UMap.t -> 'CamomileLibrary.Type.UMap.t
      val mapi :
        ?eq:('-> '-> bool) ->
        (CamomileLibrary.Type.UChar.t -> '-> 'b) ->
        'CamomileLibrary.Type.UMap.t -> 'CamomileLibrary.Type.UMap.t
      val fold :
        (CamomileLibrary.Type.UChar.t -> '-> '-> 'a) ->
        'CamomileLibrary.Type.UMap.t -> '-> 'a
      val fold_range :
        (CamomileLibrary.Type.UChar.t ->
         CamomileLibrary.Type.UChar.t -> '-> '-> 'a) ->
        'CamomileLibrary.Type.UMap.t -> '-> 'a
      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