sig
  val unicode_version : string
  type uchar = int
  module Uchar :
    sig
      type t = Uucp.uchar
      val min : Uucp.uchar
      val max : Uucp.uchar
      val is_uchar : int -> bool
      val succ : Uucp.uchar -> Uucp.uchar
      val pred : Uucp.uchar -> Uucp.uchar
      val of_int : int -> Uucp.uchar
      val unsafe_of_int : int -> Uucp.Uchar.t
      val to_int : Uucp.uchar -> int
      val equal : Uucp.uchar -> Uucp.uchar -> bool
      val compare : Uucp.uchar -> Uucp.uchar -> int
      val fold : ('-> Uucp.uchar -> 'a) -> '-> 'a
      val iter : (Uucp.uchar -> unit) -> unit
      val pp : Format.formatter -> Uucp.uchar -> unit
    end
  module Age :
    sig
      type t = [ `Unassigned | `Version of int * int ]
      val compare : Uucp.Age.t -> Uucp.Age.t -> int
      val pp : Format.formatter -> Uucp.Age.t -> unit
      val age : Uucp.uchar -> Uucp.Age.t
    end
  module Alpha : sig val is_alphabetic : Uucp.uchar -> bool end
  module Block :
    sig
      type t =
          [ `ASCII
          | `Adlam
          | `Aegean_Numbers
          | `Ahom
          | `Alchemical
          | `Alphabetic_PF
          | `Anatolian_Hieroglyphs
          | `Ancient_Greek_Music
          | `Ancient_Greek_Numbers
          | `Ancient_Symbols
          | `Arabic
          | `Arabic_Ext_A
          | `Arabic_Math
          | `Arabic_PF_A
          | `Arabic_PF_B
          | `Arabic_Sup
          | `Armenian
          | `Arrows
          | `Avestan
          | `Balinese
          | `Bamum
          | `Bamum_Sup
          | `Bassa_Vah
          | `Batak
          | `Bengali
          | `Bhaiksuki
          | `Block_Elements
          | `Bopomofo
          | `Bopomofo_Ext
          | `Box_Drawing
          | `Brahmi
          | `Braille
          | `Buginese
          | `Buhid
          | `Byzantine_Music
          | `CJK
          | `CJK_Compat
          | `CJK_Compat_Forms
          | `CJK_Compat_Ideographs
          | `CJK_Compat_Ideographs_Sup
          | `CJK_Ext_A
          | `CJK_Ext_B
          | `CJK_Ext_C
          | `CJK_Ext_D
          | `CJK_Ext_E
          | `CJK_Radicals_Sup
          | `CJK_Strokes
          | `CJK_Symbols
          | `Carian
          | `Caucasian_Albanian
          | `Chakma
          | `Cham
          | `Cherokee
          | `Cherokee_Sup
          | `Compat_Jamo
          | `Control_Pictures
          | `Coptic
          | `Coptic_Epact_Numbers
          | `Counting_Rod
          | `Cuneiform
          | `Cuneiform_Numbers
          | `Currency_Symbols
          | `Cypriot_Syllabary
          | `Cyrillic
          | `Cyrillic_Ext_A
          | `Cyrillic_Ext_B
          | `Cyrillic_Ext_C
          | `Cyrillic_Sup
          | `Deseret
          | `Devanagari
          | `Devanagari_Ext
          | `Diacriticals
          | `Diacriticals_Ext
          | `Diacriticals_For_Symbols
          | `Diacriticals_Sup
          | `Dingbats
          | `Domino
          | `Duployan
          | `Early_Dynastic_Cuneiform
          | `Egyptian_Hieroglyphs
          | `Elbasan
          | `Emoticons
          | `Enclosed_Alphanum
          | `Enclosed_Alphanum_Sup
          | `Enclosed_CJK
          | `Enclosed_Ideographic_Sup
          | `Ethiopic
          | `Ethiopic_Ext
          | `Ethiopic_Ext_A
          | `Ethiopic_Sup
          | `Geometric_Shapes
          | `Geometric_Shapes_Ext
          | `Georgian
          | `Georgian_Sup
          | `Glagolitic
          | `Glagolitic_Sup
          | `Gothic
          | `Grantha
          | `Greek
          | `Greek_Ext
          | `Gujarati
          | `Gurmukhi
          | `Half_And_Full_Forms
          | `Half_Marks
          | `Hangul
          | `Hanunoo
          | `Hatran
          | `Hebrew
          | `Hiragana
          | `IDC
          | `IPA_Ext
          | `Ideographic_Symbols
          | `Imperial_Aramaic
          | `Indic_Number_Forms
          | `Inscriptional_Pahlavi
          | `Inscriptional_Parthian
          | `Jamo
          | `Jamo_Ext_A
          | `Jamo_Ext_B
          | `Javanese
          | `Kaithi
          | `Kana_Sup
          | `Kanbun
          | `Kangxi
          | `Kannada
          | `Katakana
          | `Katakana_Ext
          | `Kayah_Li
          | `Kharoshthi
          | `Khmer
          | `Khmer_Symbols
          | `Khojki
          | `Khudawadi
          | `Lao
          | `Latin_1_Sup
          | `Latin_Ext_A
          | `Latin_Ext_Additional
          | `Latin_Ext_B
          | `Latin_Ext_C
          | `Latin_Ext_D
          | `Latin_Ext_E
          | `Lepcha
          | `Letterlike_Symbols
          | `Limbu
          | `Linear_A
          | `Linear_B_Ideograms
          | `Linear_B_Syllabary
          | `Lisu
          | `Lycian
          | `Lydian
          | `Mahajani
          | `Mahjong
          | `Malayalam
          | `Mandaic
          | `Manichaean
          | `Marchen
          | `Math_Alphanum
          | `Math_Operators
          | `Meetei_Mayek
          | `Meetei_Mayek_Ext
          | `Mende_Kikakui
          | `Meroitic_Cursive
          | `Meroitic_Hieroglyphs
          | `Miao
          | `Misc_Arrows
          | `Misc_Math_Symbols_A
          | `Misc_Math_Symbols_B
          | `Misc_Pictographs
          | `Misc_Symbols
          | `Misc_Technical
          | `Modi
          | `Modifier_Letters
          | `Modifier_Tone_Letters
          | `Mongolian
          | `Mongolian_Sup
          | `Mro
          | `Multani
          | `Music
          | `Myanmar
          | `Myanmar_Ext_A
          | `Myanmar_Ext_B
          | `NB
          | `NKo
          | `Nabataean
          | `New_Tai_Lue
          | `Newa
          | `Number_Forms
          | `OCR
          | `Ogham
          | `Ol_Chiki
          | `Old_Hungarian
          | `Old_Italic
          | `Old_North_Arabian
          | `Old_Permic
          | `Old_Persian
          | `Old_South_Arabian
          | `Old_Turkic
          | `Oriya
          | `Ornamental_Dingbats
          | `Osage
          | `Osmanya
          | `PUA
          | `Pahawh_Hmong
          | `Palmyrene
          | `Pau_Cin_Hau
          | `Phags_Pa
          | `Phaistos
          | `Phoenician
          | `Phonetic_Ext
          | `Phonetic_Ext_Sup
          | `Playing_Cards
          | `Psalter_Pahlavi
          | `Punctuation
          | `Rejang
          | `Rumi
          | `Runic
          | `Samaritan
          | `Saurashtra
          | `Sharada
          | `Shavian
          | `Shorthand_Format_Controls
          | `Siddham
          | `Sinhala
          | `Sinhala_Archaic_Numbers
          | `Small_Forms
          | `Sora_Sompeng
          | `Specials
          | `Sundanese
          | `Sundanese_Sup
          | `Sup_Arrows_A
          | `Sup_Arrows_B
          | `Sup_Arrows_C
          | `Sup_Math_Operators
          | `Sup_PUA_A
          | `Sup_PUA_B
          | `Sup_Punctuation
          | `Sup_Symbols_And_Pictographs
          | `Super_And_Sub
          | `Sutton_SignWriting
          | `Syloti_Nagri
          | `Syriac
          | `Tagalog
          | `Tagbanwa
          | `Tags
          | `Tai_Le
          | `Tai_Tham
          | `Tai_Viet
          | `Tai_Xuan_Jing
          | `Takri
          | `Tamil
          | `Tangut
          | `Tangut_Components
          | `Telugu
          | `Thaana
          | `Thai
          | `Tibetan
          | `Tifinagh
          | `Tirhuta
          | `Transport_And_Map
          | `UCAS
          | `UCAS_Ext
          | `Ugaritic
          | `VS
          | `VS_Sup
          | `Vai
          | `Vedic_Ext
          | `Vertical_Forms
          | `Warang_Citi
          | `Yi_Radicals
          | `Yi_Syllables
          | `Yijing ]
      val compare : Uucp.Block.t -> Uucp.Block.t -> int
      val pp : Format.formatter -> Uucp.Block.t -> unit
      val blocks : (Uucp.Block.t * (Uucp.uchar * Uucp.uchar)) list
      val block : Uucp.uchar -> Uucp.Block.t
    end
  module Break :
    sig
      type line =
          [ `AI
          | `AL
          | `B2
          | `BA
          | `BB
          | `BK
          | `CB
          | `CJ
          | `CL
          | `CM
          | `CP
          | `CR
          | `EB
          | `EM
          | `EX
          | `GL
          | `H2
          | `H3
          | `HL
          | `HY
          | `ID
          | `IN
          | `IS
          | `JL
          | `JT
          | `JV
          | `LF
          | `NL
          | `NS
          | `NU
          | `OP
          | `PO
          | `PR
          | `QU
          | `RI
          | `SA
          | `SG
          | `SP
          | `SY
          | `WJ
          | `XX
          | `ZW
          | `ZWJ ]
      val pp_line : Format.formatter -> Uucp.Break.line -> unit
      val line : Uucp.uchar -> Uucp.Break.line
      type grapheme_cluster =
          [ `CN
          | `CR
          | `EB
          | `EBG
          | `EM
          | `EX
          | `GAZ
          | `L
          | `LF
          | `LV
          | `LVT
          | `PP
          | `RI
          | `SM
          | `T
          | `V
          | `XX
          | `ZWJ ]
      val pp_grapheme_cluster :
        Format.formatter -> Uucp.Break.grapheme_cluster -> unit
      val grapheme_cluster : Uucp.uchar -> Uucp.Break.grapheme_cluster
      type word =
          [ `CR
          | `DQ
          | `EB
          | `EBG
          | `EM
          | `EX
          | `Extend
          | `FO
          | `GAZ
          | `HL
          | `KA
          | `LE
          | `LF
          | `MB
          | `ML
          | `MN
          | `NL
          | `NU
          | `RI
          | `SQ
          | `XX
          | `ZWJ ]
      val pp_word : Format.formatter -> Uucp.Break.word -> unit
      val word : Uucp.uchar -> Uucp.Break.word
      type sentence =
          [ `AT
          | `CL
          | `CR
          | `EX
          | `FO
          | `LE
          | `LF
          | `LO
          | `NU
          | `SC
          | `SE
          | `SP
          | `ST
          | `UP
          | `XX ]
      val pp_sentence : Format.formatter -> Uucp.Break.sentence -> unit
      val sentence : Uucp.uchar -> Uucp.Break.sentence
      type east_asian_width = [ `A | `F | `H | `N | `Na | `W ]
      val pp_east_asian_width :
        Format.formatter -> Uucp.Break.east_asian_width -> unit
      val east_asian_width : Uucp.uchar -> Uucp.Break.east_asian_width
      val tty_width_hint : Uucp.uchar -> int
      module Low :
        sig
          val line : Uucp.uchar -> int
          val line_max : int
          val line_of_int : Uucp.Break.line array
          val grapheme_cluster : Uucp.uchar -> int
          val grapheme_cluster_max : int
          val grapheme_cluster_of_int : Uucp.Break.grapheme_cluster array
          val word : Uucp.uchar -> int
          val word_max : int
          val word_of_int : Uucp.Break.word array
          val sentence : Uucp.uchar -> int
          val sentence_max : int
          val sentence_of_int : Uucp.Break.sentence array
        end
    end
  module Case :
    sig
      val is_lower : Uucp.uchar -> bool
      val is_upper : Uucp.uchar -> bool
      val is_cased : Uucp.uchar -> bool
      val is_case_ignorable : Uucp.uchar -> bool
      module Map :
        sig
          val to_lower : Uucp.uchar -> [ `Self | `Uchars of Uucp.uchar list ]
          val to_upper : Uucp.uchar -> [ `Self | `Uchars of Uucp.uchar list ]
          val to_title : Uucp.uchar -> [ `Self | `Uchars of Uucp.uchar list ]
        end
      module Fold :
        sig
          val fold : Uucp.uchar -> [ `Self | `Uchars of Uucp.uchar list ]
        end
      module Nfkc_fold :
        sig
          val fold : Uucp.uchar -> [ `Self | `Uchars of Uucp.uchar list ]
        end
    end
  module Cjk :
    sig
      val is_ideographic : Uucp.uchar -> bool
      val is_ids_bin_op : Uucp.uchar -> bool
      val is_ids_tri_op : Uucp.uchar -> bool
      val is_radical : Uucp.uchar -> bool
      val is_unified_ideograph : Uucp.uchar -> bool
    end
  module Func :
    sig
      val is_dash : Uucp.uchar -> bool
      val is_diacritic : Uucp.uchar -> bool
      val is_extender : Uucp.uchar -> bool
      val is_grapheme_base : Uucp.uchar -> bool
      val is_grapheme_extend : Uucp.uchar -> bool
      val is_math : Uucp.uchar -> bool
      val is_quotation_mark : Uucp.uchar -> bool
      val is_soft_dotted : Uucp.uchar -> bool
      val is_terminal_punctuation : Uucp.uchar -> bool
    end
  module Gc :
    sig
      type t =
          [ `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 compare : Uucp.Gc.t -> Uucp.Gc.t -> int
      val pp : Format.formatter -> Uucp.Gc.t -> unit
      val general_category : Uucp.uchar -> Uucp.Gc.t
    end
  module Gen :
    sig
      val is_default_ignorable : Uucp.uchar -> bool
      val is_deprecated : Uucp.uchar -> bool
      val is_logical_order_exception : Uucp.uchar -> bool
      val is_non_character : Uucp.uchar -> bool
      val is_variation_selector : Uucp.uchar -> bool
    end
  module Id :
    sig
      val is_id_start : Uucp.uchar -> bool
      val is_id_continue : Uucp.uchar -> bool
      val is_xid_start : Uucp.uchar -> bool
      val is_xid_continue : Uucp.uchar -> bool
      val is_pattern_syntax : Uucp.uchar -> bool
      val is_pattern_white_space : Uucp.uchar -> bool
    end
  module Name :
    sig
      val name : Uucp.uchar -> string
      type alias_tag =
          [ `Abbreviation | `Alternate | `Control | `Correction | `Figment ]
      val pp_alias_tag : Format.formatter -> Uucp.Name.alias_tag -> unit
      val name_alias : Uucp.uchar -> (Uucp.Name.alias_tag * string) list
    end
  module Num :
    sig
      val is_ascii_hex_digit : Uucp.uchar -> bool
      val is_hex_digit : Uucp.uchar -> bool
      type numeric_type = [ `De | `Di | `None | `Nu ]
      val pp_numeric_type : Format.formatter -> Uucp.Num.numeric_type -> unit
      val numeric_type : Uucp.uchar -> Uucp.Num.numeric_type
      type numeric_value = [ `Frac of int * int | `NaN | `Num of int64 ]
      val pp_numeric_value :
        Format.formatter -> Uucp.Num.numeric_value -> unit
      val numeric_value :
        Uucp.uchar -> [ `Frac of int * int | `NaN | `Num of int64 ]
    end
  module Script :
    sig
      type t =
          [ `Adlm
          | `Aghb
          | `Ahom
          | `Arab
          | `Armi
          | `Armn
          | `Avst
          | `Bali
          | `Bamu
          | `Bass
          | `Batk
          | `Beng
          | `Bhks
          | `Bopo
          | `Brah
          | `Brai
          | `Bugi
          | `Buhd
          | `Cakm
          | `Cans
          | `Cari
          | `Cham
          | `Cher
          | `Copt
          | `Cprt
          | `Cyrl
          | `Deva
          | `Dsrt
          | `Dupl
          | `Egyp
          | `Elba
          | `Ethi
          | `Geor
          | `Glag
          | `Goth
          | `Gran
          | `Grek
          | `Gujr
          | `Guru
          | `Hang
          | `Hani
          | `Hano
          | `Hatr
          | `Hebr
          | `Hira
          | `Hluw
          | `Hmng
          | `Hrkt
          | `Hung
          | `Ital
          | `Java
          | `Kali
          | `Kana
          | `Khar
          | `Khmr
          | `Khoj
          | `Knda
          | `Kthi
          | `Lana
          | `Laoo
          | `Latn
          | `Lepc
          | `Limb
          | `Lina
          | `Linb
          | `Lisu
          | `Lyci
          | `Lydi
          | `Mahj
          | `Mand
          | `Mani
          | `Marc
          | `Mend
          | `Merc
          | `Mero
          | `Mlym
          | `Modi
          | `Mong
          | `Mroo
          | `Mtei
          | `Mult
          | `Mymr
          | `Narb
          | `Nbat
          | `Newa
          | `Nkoo
          | `Ogam
          | `Olck
          | `Orkh
          | `Orya
          | `Osge
          | `Osma
          | `Palm
          | `Pauc
          | `Perm
          | `Phag
          | `Phli
          | `Phlp
          | `Phnx
          | `Plrd
          | `Prti
          | `Qaai
          | `Rjng
          | `Runr
          | `Samr
          | `Sarb
          | `Saur
          | `Sgnw
          | `Shaw
          | `Shrd
          | `Sidd
          | `Sind
          | `Sinh
          | `Sora
          | `Sund
          | `Sylo
          | `Syrc
          | `Tagb
          | `Takr
          | `Tale
          | `Talu
          | `Taml
          | `Tang
          | `Tavt
          | `Telu
          | `Tfng
          | `Tglg
          | `Thaa
          | `Thai
          | `Tibt
          | `Tirh
          | `Ugar
          | `Vaii
          | `Wara
          | `Xpeo
          | `Xsux
          | `Yiii
          | `Zinh
          | `Zyyy
          | `Zzzz ]
      val compare : Uucp.Script.t -> Uucp.Script.t -> int
      val pp : Format.formatter -> Uucp.Script.t -> unit
      val script : Uucp.uchar -> Uucp.Script.t
      val script_extensions : Uucp.uchar -> Uucp.Script.t list
    end
  module White : sig val is_white_space : Uucp.uchar -> bool end
  module Cmap :
    sig
      type 'a tree =
          Empty
        | C of int * 'a
        | Cn of 'Uucp.Cmap.tree * 'Uucp.Cmap.tree * int * 'a
      type 'a t = { default : 'a; tree : 'Uucp.Cmap.tree; }
      val get : 'Uucp.Cmap.t -> int -> 'a
      val of_sorted_list : '-> [ `C of int * 'a ] list -> 'Uucp.Cmap.t
      val height : 'Uucp.Cmap.t -> int
      val word_size : ('-> int) -> 'Uucp.Cmap.t -> int
      val dump :
        (Format.formatter -> '-> unit) ->
        Format.formatter -> 'Uucp.Cmap.t -> unit
    end
  module Rmap :
    sig
      type 'a tree =
          Empty
        | R of int * int * 'a
        | Rn of 'Uucp.Rmap.tree * 'Uucp.Rmap.tree * int * int * 'a
      type 'a t = { default : 'a; tree : 'Uucp.Rmap.tree; }
      val get : 'Uucp.Rmap.t -> int -> 'a
      val of_sorted_list :
        '-> [ `R of int * int * 'a ] list -> 'Uucp.Rmap.t
      val height : 'Uucp.Rmap.t -> int
      val word_size : ('-> int) -> 'Uucp.Rmap.t -> int
      val dump :
        (Format.formatter -> '-> unit) ->
        Format.formatter -> 'Uucp.Rmap.t -> unit
    end
  module Tmap :
    sig
      type 'a t = { default : 'a; l0 : 'a array array array; }
      val nil : 'a array
      val create : '-> 'Uucp.Tmap.t
      val get : 'Uucp.Tmap.t -> int -> 'a
      val set : 'Uucp.Tmap.t -> int -> '-> unit
      val word_size : ('-> int) -> 'Uucp.Tmap.t -> int
      val dump :
        (Format.formatter -> '-> unit) ->
        Format.formatter -> 'Uucp.Tmap.t -> unit
    end
  module Tmapbool :
    sig
      type t = { default : bool; l0 : string array array; }
      val nil : 'a array
      val snil : string
      val create : bool -> Uucp.Tmapbool.t
      val get : Uucp.Tmapbool.t -> int -> bool
      val set : Uucp.Tmapbool.t -> int -> bool -> unit
      val word_size : Uucp.Tmapbool.t -> int
      val dump : Format.formatter -> Uucp.Tmapbool.t -> unit
    end
  module Tmapbyte :
    sig
      type t = { default : int; l0 : string array array; }
      val nil : 'a array
      val snil : string
      val create : int -> Uucp.Tmapbyte.t
      val get : Uucp.Tmapbyte.t -> int -> int
      val set : Uucp.Tmapbyte.t -> int -> int -> unit
      val word_size : Uucp.Tmapbyte.t -> int
      val dump : Format.formatter -> Uucp.Tmapbyte.t -> unit
    end
  module Tmap4bytes :
    sig
      type t = { default : string; l0 : string array array; }
      val nil : 'a array
      val snil : string
      val create : string -> Uucp.Tmap4bytes.t
      val word_size : Uucp.Tmap4bytes.t -> int
      val dump : Format.formatter -> Uucp.Tmap4bytes.t -> unit
      val create_uint16_pair : int * int -> Uucp.Tmap4bytes.t
      val get_uint16_pair : Uucp.Tmap4bytes.t -> int -> int * int
      val set_uint16_pair : Uucp.Tmap4bytes.t -> int -> int * int -> unit
    end
end