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 : UChar.t -> UCharInfo.Type.general_category_type
      val load_general_category_map :
        unit -> UCharInfo.Type.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 :
        UCharInfo.Type.character_property_type -> UCharTbl.Bool.t
      val load_property_tbl_by_name : string -> UCharTbl.Bool.t
      val load_property_set :
        UCharInfo.Type.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 -> UCharInfo.Type.script_type
      val load_script_map : unit -> UCharInfo.Type.script_type UMap.t
      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 UCharInfo.Type.casemap_condition ]
      type special_casing_property = {
        lower : UChar.t list;
        title : UChar.t list;
        upper : UChar.t list;
        condition : UCharInfo.Type.casemap_condition list;
      }
      val load_conditional_casing_tbl :
        unit -> UCharInfo.Type.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 UCharInfo.Type.decomposition_type * UChar.t list
          | `HangulSyllable ]
      val load_decomposition_tbl :
        unit -> UCharInfo.Type.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 Make : functor (Config : ConfigInt.Type-> Type
end