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:UCol.precision ->
        ?variable:UCol.variable_option ->
        UCol.Type.text -> UCol.Type.text -> int
      val sort_key :
        ?locale:string ->
        ?prec:UCol.precision ->
        ?variable:UCol.variable_option -> UCol.Type.text -> string
      val compare_with_key :
        ?locale:string ->
        ?prec:UCol.precision ->
        ?variable:UCol.variable_option -> string -> UCol.Type.text -> int
      val search_with_key :
        ?locale:string ->
        ?prec:UCol.precision ->
        ?variable:UCol.variable_option ->
        string ->
        UCol.Type.text ->
        UCol.Type.index -> UCol.Type.index * UCol.Type.index
      val search :
        ?locale:string ->
        ?prec:UCol.precision ->
        ?variable:UCol.variable_option ->
        UCol.Type.text ->
        UCol.Type.text ->
        UCol.Type.index -> UCol.Type.index * UCol.Type.index
    end
  module Make :
    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