sig
  exception Failure
  module Keysym :
    sig
      type t = int
      val _VoidSymbol : t
      val _BackSpace : t
      val _Tab : t
      val _Linefeed : t
      val _Clear : t
      val _Return : t
      val _Pause : t
      val _Scroll_Lock : t
      val _Sys_Req : t
      val _Escape : t
      val _Delete : t
      val _Multi_key : t
      val _SingleCandidate : t
      val _MultipleCandidate : t
      val _PreviousCandidate : t
      val _Kanji : t
      val _Muhenkan : t
      val _Henkan_Mode : t
      val _Henkan : t
      val _Romaji : t
      val _Hiragana : t
      val _Katakana : t
      val _Hiragana_Katakana : t
      val _Zenkaku : t
      val _Hankaku : t
      val _Zenkaku_Hankaku : t
      val _Touroku : t
      val _Massyo : t
      val _Kana_Lock : t
      val _Kana_Shift : t
      val _Eisu_Shift : t
      val _Eisu_toggle : t
      val _Zen_Koho : t
      val _Mae_Koho : t
      val _Home : t
      val _Left : t
      val _Up : t
      val _Right : t
      val _Down : t
      val _Prior : t
      val _Page_Up : t
      val _Next : t
      val _Page_Down : t
      val _End : t
      val _Begin : t
      val _Select : t
      val _Print : t
      val _Execute : t
      val _Insert : t
      val _Undo : t
      val _Redo : t
      val _Menu : t
      val _Find : t
      val _Cancel : t
      val _Help : t
      val _Break : t
      val _Mode_switch : t
      val _script_switch : t
      val _Num_Lock : t
      val _KP_Space : t
      val _KP_Tab : t
      val _KP_Enter : t
      val _KP_F1 : t
      val _KP_F2 : t
      val _KP_F3 : t
      val _KP_F4 : t
      val _KP_Home : t
      val _KP_Left : t
      val _KP_Up : t
      val _KP_Right : t
      val _KP_Down : t
      val _KP_Prior : t
      val _KP_Page_Up : t
      val _KP_Next : t
      val _KP_Page_Down : t
      val _KP_End : t
      val _KP_Begin : t
      val _KP_Insert : t
      val _KP_Delete : t
      val _KP_Equal : t
      val _KP_Multiply : t
      val _KP_Add : t
      val _KP_Separator : t
      val _KP_Subtract : t
      val _KP_Decimal : t
      val _KP_Divide : t
      val _KP_0 : t
      val _KP_1 : t
      val _KP_2 : t
      val _KP_3 : t
      val _KP_4 : t
      val _KP_5 : t
      val _KP_6 : t
      val _KP_7 : t
      val _KP_8 : t
      val _KP_9 : t
      val _F1 : t
      val _F2 : t
      val _F3 : t
      val _F4 : t
      val _F5 : t
      val _F6 : t
      val _F7 : t
      val _F8 : t
      val _F9 : t
      val _F10 : t
      val _F11 : t
      val _L1 : t
      val _F12 : t
      val _L2 : t
      val _F13 : t
      val _L3 : t
      val _F14 : t
      val _L4 : t
      val _F15 : t
      val _L5 : t
      val _F16 : t
      val _L6 : t
      val _F17 : t
      val _L7 : t
      val _F18 : t
      val _L8 : t
      val _F19 : t
      val _L9 : t
      val _F20 : t
      val _L10 : t
      val _F21 : t
      val _R1 : t
      val _F22 : t
      val _R2 : t
      val _F23 : t
      val _R3 : t
      val _F24 : t
      val _R4 : t
      val _F25 : t
      val _R5 : t
      val _F26 : t
      val _R6 : t
      val _F27 : t
      val _R7 : t
      val _F28 : t
      val _R8 : t
      val _F29 : t
      val _R9 : t
      val _F30 : t
      val _R10 : t
      val _F31 : t
      val _R11 : t
      val _F32 : t
      val _R12 : t
      val _F33 : t
      val _R13 : t
      val _F34 : t
      val _R14 : t
      val _F35 : t
      val _R15 : t
      val _Shift_L : t
      val _Shift_R : t
      val _Control_L : t
      val _Control_R : t
      val _Caps_Lock : t
      val _Shift_Lock : t
      val _Meta_L : t
      val _Meta_R : t
      val _Alt_L : t
      val _Alt_R : t
      val _Super_L : t
      val _Super_R : t
      val _Hyper_L : t
      val _Hyper_R : t
      val _ISO_Lock : t
      val _ISO_Level2_Latch : t
      val _ISO_Level3_Shift : t
      val _ISO_Level3_Latch : t
      val _ISO_Level3_Lock : t
      val _ISO_Group_Shift : t
      val _ISO_Group_Latch : t
      val _ISO_Group_Lock : t
      val _ISO_Next_Group : t
      val _ISO_Next_Group_Lock : t
      val _ISO_Prev_Group : t
      val _ISO_Prev_Group_Lock : t
      val _ISO_First_Group : t
      val _ISO_First_Group_Lock : t
      val _ISO_Last_Group : t
      val _ISO_Last_Group_Lock : t
      val _ISO_Left_Tab : t
      val _ISO_Move_Line_Up : t
      val _ISO_Move_Line_Down : t
      val _ISO_Partial_Line_Up : t
      val _ISO_Partial_Line_Down : t
      val _ISO_Partial_Space_Left : t
      val _ISO_Partial_Space_Right : t
      val _ISO_Set_Margin_Left : t
      val _ISO_Set_Margin_Right : t
      val _ISO_Release_Margin_Left : t
      val _ISO_Release_Margin_Right : t
      val _ISO_Release_Both_Margins : t
      val _ISO_Fast_Cursor_Left : t
      val _ISO_Fast_Cursor_Right : t
      val _ISO_Fast_Cursor_Up : t
      val _ISO_Fast_Cursor_Down : t
      val _ISO_Continuous_Underline : t
      val _ISO_Discontinuous_Underline : t
      val _ISO_Emphasize : t
      val _ISO_Center_Object : t
      val _ISO_Enter : t
      val _dead_grave : t
      val _dead_acute : t
      val _dead_circumflex : t
      val _dead_tilde : t
      val _dead_macron : t
      val _dead_breve : t
      val _dead_abovedot : t
      val _dead_diaeresis : t
      val _dead_abovering : t
      val _dead_doubleacute : t
      val _dead_caron : t
      val _dead_cedilla : t
      val _dead_ogonek : t
      val _dead_iota : t
      val _dead_voiced_sound : t
      val _dead_semivoiced_sound : t
      val _dead_belowdot : t
      val _First_Virtual_Screen : t
      val _Prev_Virtual_Screen : t
      val _Next_Virtual_Screen : t
      val _Last_Virtual_Screen : t
      val _Terminate_Server : t
      val _AccessX_Enable : t
      val _AccessX_Feedback_Enable : t
      val _RepeatKeys_Enable : t
      val _SlowKeys_Enable : t
      val _BounceKeys_Enable : t
      val _StickyKeys_Enable : t
      val _MouseKeys_Enable : t
      val _MouseKeys_Accel_Enable : t
      val _Overlay1_Enable : t
      val _Overlay2_Enable : t
      val _AudibleBell_Enable : t
      val _Pointer_Left : t
      val _Pointer_Right : t
      val _Pointer_Up : t
      val _Pointer_Down : t
      val _Pointer_UpLeft : t
      val _Pointer_UpRight : t
      val _Pointer_DownLeft : t
      val _Pointer_DownRight : t
      val _Pointer_Button_Dflt : t
      val _Pointer_Button1 : t
      val _Pointer_Button2 : t
      val _Pointer_Button3 : t
      val _Pointer_Button4 : t
      val _Pointer_Button5 : t
      val _Pointer_DblClick_Dflt : t
      val _Pointer_DblClick1 : t
      val _Pointer_DblClick2 : t
      val _Pointer_DblClick3 : t
      val _Pointer_DblClick4 : t
      val _Pointer_DblClick5 : t
      val _Pointer_Drag_Dflt : t
      val _Pointer_Drag1 : t
      val _Pointer_Drag2 : t
      val _Pointer_Drag3 : t
      val _Pointer_Drag4 : t
      val _Pointer_Drag5 : t
      val _Pointer_EnableKeys : t
      val _Pointer_Accelerate : t
      val _Pointer_DfltBtnNext : t
      val _Pointer_DfltBtnPrev : t
      val _3270_Duplicate : t
      val _3270_FieldMark : t
      val _3270_Right2 : t
      val _3270_Left2 : t
      val _3270_BackTab : t
      val _3270_EraseEOF : t
      val _3270_EraseInput : t
      val _3270_Reset : t
      val _3270_Quit : t
      val _3270_PA1 : t
      val _3270_PA2 : t
      val _3270_PA3 : t
      val _3270_Test : t
      val _3270_Attn : t
      val _3270_CursorBlink : t
      val _3270_AltCursor : t
      val _3270_KeyClick : t
      val _3270_Jump : t
      val _3270_Ident : t
      val _3270_Rule : t
      val _3270_Copy : t
      val _3270_Play : t
      val _3270_Setup : t
      val _3270_Record : t
      val _3270_ChangeScreen : t
      val _3270_DeleteWord : t
      val _3270_ExSelect : t
      val _3270_CursorSelect : t
      val _3270_PrintScreen : t
      val _3270_Enter : t
      val _space : t
      val _exclam : t
      val _quotedbl : t
      val _numbersign : t
      val _dollar : t
      val _percent : t
      val _ampersand : t
      val _apostrophe : t
      val _quoteright : t
      val _parenleft : t
      val _parenright : t
      val _asterisk : t
      val _plus : t
      val _comma : t
      val _minus : t
      val _period : t
      val _slash : t
      val _0 : t
      val _1 : t
      val _2 : t
      val _3 : t
      val _4 : t
      val _5 : t
      val _6 : t
      val _7 : t
      val _8 : t
      val _9 : t
      val _colon : t
      val _semicolon : t
      val _less : t
      val _equal : t
      val _greater : t
      val _question : t
      val _at : t
      val _A : t
      val _B : t
      val _C : t
      val _D : t
      val _E : t
      val _F : t
      val _G : t
      val _H : t
      val _I : t
      val _J : t
      val _K : t
      val _L : t
      val _M : t
      val _N : t
      val _O : t
      val _P : t
      val _Q : t
      val _R : t
      val _S : t
      val _T : t
      val _U : t
      val _V : t
      val _W : t
      val _X : t
      val _Y : t
      val _Z : t
      val _bracketleft : t
      val _backslash : t
      val _bracketright : t
      val _asciicircum : t
      val _underscore : t
      val _grave : t
      val _quoteleft : t
      val _a : t
      val _b : t
      val _c : t
      val _d : t
      val _e : t
      val _f : t
      val _g : t
      val _h : t
      val _i : t
      val _j : t
      val _k : t
      val _l : t
      val _m : t
      val _n : t
      val _o : t
      val _p : t
      val _q : t
      val _r : t
      val _s : t
      val _t : t
      val _u : t
      val _v : t
      val _w : t
      val _x : t
      val _y : t
      val _z : t
      val _braceleft : t
      val _bar : t
      val _braceright : t
      val _asciitilde : t
      val _nobreakspace : t
      val _exclamdown : t
      val _cent : t
      val _sterling : t
      val _currency : t
      val _yen : t
      val _brokenbar : t
      val _section : t
      val _diaeresis : t
      val _copyright : t
      val _ordfeminine : t
      val _guillemotleft : t
      val _notsign : t
      val _hyphen : t
      val _registered : t
      val _macron : t
      val _degree : t
      val _plusminus : t
      val _twosuperior : t
      val _threesuperior : t
      val _acute : t
      val _mu : t
      val _paragraph : t
      val _periodcentered : t
      val _cedilla : t
      val _onesuperior : t
      val _masculine : t
      val _guillemotright : t
      val _onequarter : t
      val _onehalf : t
      val _threequarters : t
      val _questiondown : t
      val _Agrave : t
      val _Aacute : t
      val _Acircumflex : t
      val _Atilde : t
      val _Adiaeresis : t
      val _Aring : t
      val _AE : t
      val _Ccedilla : t
      val _Egrave : t
      val _Eacute : t
      val _Ecircumflex : t
      val _Ediaeresis : t
      val _Igrave : t
      val _Iacute : t
      val _Icircumflex : t
      val _Idiaeresis : t
      val _ETH : t
      val _Eth : t
      val _Ntilde : t
      val _Ograve : t
      val _Oacute : t
      val _Ocircumflex : t
      val _Otilde : t
      val _Odiaeresis : t
      val _multiply : t
      val _Ooblique : t
      val _Ugrave : t
      val _Uacute : t
      val _Ucircumflex : t
      val _Udiaeresis : t
      val _Yacute : t
      val _THORN : t
      val _Thorn : t
      val _ssharp : t
      val _agrave : t
      val _aacute : t
      val _acircumflex : t
      val _atilde : t
      val _adiaeresis : t
      val _aring : t
      val _ae : t
      val _ccedilla : t
      val _egrave : t
      val _eacute : t
      val _ecircumflex : t
      val _ediaeresis : t
      val _igrave : t
      val _iacute : t
      val _icircumflex : t
      val _idiaeresis : t
      val _eth : t
      val _ntilde : t
      val _ograve : t
      val _oacute : t
      val _ocircumflex : t
      val _otilde : t
      val _odiaeresis : t
      val _division : t
      val _oslash : t
      val _ugrave : t
      val _uacute : t
      val _ucircumflex : t
      val _udiaeresis : t
      val _yacute : t
      val _thorn : t
      val _ydiaeresis : t
      val _Aogonek : t
      val _breve : t
      val _Lstroke : t
      val _Lcaron : t
      val _Sacute : t
      val _Scaron : t
      val _Scedilla : t
      val _Tcaron : t
      val _Zacute : t
      val _Zcaron : t
      val _Zabovedot : t
      val _aogonek : t
      val _ogonek : t
      val _lstroke : t
      val _lcaron : t
      val _sacute : t
      val _caron : t
      val _scaron : t
      val _scedilla : t
      val _tcaron : t
      val _zacute : t
      val _doubleacute : t
      val _zcaron : t
      val _zabovedot : t
      val _Racute : t
      val _Abreve : t
      val _Lacute : t
      val _Cacute : t
      val _Ccaron : t
      val _Eogonek : t
      val _Ecaron : t
      val _Dcaron : t
      val _Dstroke : t
      val _Nacute : t
      val _Ncaron : t
      val _Odoubleacute : t
      val _Rcaron : t
      val _Uring : t
      val _Udoubleacute : t
      val _Tcedilla : t
      val _racute : t
      val _abreve : t
      val _lacute : t
      val _cacute : t
      val _ccaron : t
      val _eogonek : t
      val _ecaron : t
      val _dcaron : t
      val _dstroke : t
      val _nacute : t
      val _ncaron : t
      val _odoubleacute : t
      val _udoubleacute : t
      val _rcaron : t
      val _uring : t
      val _tcedilla : t
      val _abovedot : t
      val _Hstroke : t
      val _Hcircumflex : t
      val _Iabovedot : t
      val _Gbreve : t
      val _Jcircumflex : t
      val _hstroke : t
      val _hcircumflex : t
      val _idotless : t
      val _gbreve : t
      val _jcircumflex : t
      val _Cabovedot : t
      val _Ccircumflex : t
      val _Gabovedot : t
      val _Gcircumflex : t
      val _Ubreve : t
      val _Scircumflex : t
      val _cabovedot : t
      val _ccircumflex : t
      val _gabovedot : t
      val _gcircumflex : t
      val _ubreve : t
      val _scircumflex : t
      val _kra : t
      val _kappa : t
      val _Rcedilla : t
      val _Itilde : t
      val _Lcedilla : t
      val _Emacron : t
      val _Gcedilla : t
      val _Tslash : t
      val _rcedilla : t
      val _itilde : t
      val _lcedilla : t
      val _emacron : t
      val _gcedilla : t
      val _tslash : t
      val _ENG : t
      val _eng : t
      val _Amacron : t
      val _Iogonek : t
      val _Eabovedot : t
      val _Imacron : t
      val _Ncedilla : t
      val _Omacron : t
      val _Kcedilla : t
      val _Uogonek : t
      val _Utilde : t
      val _Umacron : t
      val _amacron : t
      val _iogonek : t
      val _eabovedot : t
      val _imacron : t
      val _ncedilla : t
      val _omacron : t
      val _kcedilla : t
      val _uogonek : t
      val _utilde : t
      val _umacron : t
      val _overline : t
      val _kana_fullstop : t
      val _kana_openingbracket : t
      val _kana_closingbracket : t
      val _kana_comma : t
      val _kana_conjunctive : t
      val _kana_middledot : t
      val _kana_WO : t
      val _kana_a : t
      val _kana_i : t
      val _kana_u : t
      val _kana_e : t
      val _kana_o : t
      val _kana_ya : t
      val _kana_yu : t
      val _kana_yo : t
      val _kana_tsu : t
      val _kana_tu : t
      val _prolongedsound : t
      val _kana_A : t
      val _kana_I : t
      val _kana_U : t
      val _kana_E : t
      val _kana_O : t
      val _kana_KA : t
      val _kana_KI : t
      val _kana_KU : t
      val _kana_KE : t
      val _kana_KO : t
      val _kana_SA : t
      val _kana_SHI : t
      val _kana_SU : t
      val _kana_SE : t
      val _kana_SO : t
      val _kana_TA : t
      val _kana_CHI : t
      val _kana_TI : t
      val _kana_TSU : t
      val _kana_TU : t
      val _kana_TE : t
      val _kana_TO : t
      val _kana_NA : t
      val _kana_NI : t
      val _kana_NU : t
      val _kana_NE : t
      val _kana_NO : t
      val _kana_HA : t
      val _kana_HI : t
      val _kana_FU : t
      val _kana_HU : t
      val _kana_HE : t
      val _kana_HO : t
      val _kana_MA : t
      val _kana_MI : t
      val _kana_MU : t
      val _kana_ME : t
      val _kana_MO : t
      val _kana_YA : t
      val _kana_YU : t
      val _kana_YO : t
      val _kana_RA : t
      val _kana_RI : t
      val _kana_RU : t
      val _kana_RE : t
      val _kana_RO : t
      val _kana_WA : t
      val _kana_N : t
      val _voicedsound : t
      val _semivoicedsound : t
      val _kana_switch : t
      val _Arabic_comma : t
      val _Arabic_semicolon : t
      val _Arabic_question_mark : t
      val _Arabic_hamza : t
      val _Arabic_maddaonalef : t
      val _Arabic_hamzaonalef : t
      val _Arabic_hamzaonwaw : t
      val _Arabic_hamzaunderalef : t
      val _Arabic_hamzaonyeh : t
      val _Arabic_alef : t
      val _Arabic_beh : t
      val _Arabic_tehmarbuta : t
      val _Arabic_teh : t
      val _Arabic_theh : t
      val _Arabic_jeem : t
      val _Arabic_hah : t
      val _Arabic_khah : t
      val _Arabic_dal : t
      val _Arabic_thal : t
      val _Arabic_ra : t
      val _Arabic_zain : t
      val _Arabic_seen : t
      val _Arabic_sheen : t
      val _Arabic_sad : t
      val _Arabic_dad : t
      val _Arabic_tah : t
      val _Arabic_zah : t
      val _Arabic_ain : t
      val _Arabic_ghain : t
      val _Arabic_tatweel : t
      val _Arabic_feh : t
      val _Arabic_qaf : t
      val _Arabic_kaf : t
      val _Arabic_lam : t
      val _Arabic_meem : t
      val _Arabic_noon : t
      val _Arabic_ha : t
      val _Arabic_heh : t
      val _Arabic_waw : t
      val _Arabic_alefmaksura : t
      val _Arabic_yeh : t
      val _Arabic_fathatan : t
      val _Arabic_dammatan : t
      val _Arabic_kasratan : t
      val _Arabic_fatha : t
      val _Arabic_damma : t
      val _Arabic_kasra : t
      val _Arabic_shadda : t
      val _Arabic_sukun : t
      val _Arabic_switch : t
      val _Serbian_dje : t
      val _Macedonia_gje : t
      val _Cyrillic_io : t
      val _Ukrainian_ie : t
      val _Ukranian_je : t
      val _Macedonia_dse : t
      val _Ukrainian_i : t
      val _Ukranian_i : t
      val _Ukrainian_yi : t
      val _Ukranian_yi : t
      val _Cyrillic_je : t
      val _Serbian_je : t
      val _Cyrillic_lje : t
      val _Serbian_lje : t
      val _Cyrillic_nje : t
      val _Serbian_nje : t
      val _Serbian_tshe : t
      val _Macedonia_kje : t
      val _Byelorussian_shortu : t
      val _Cyrillic_dzhe : t
      val _Serbian_dze : t
      val _numerosign : t
      val _Serbian_DJE : t
      val _Macedonia_GJE : t
      val _Cyrillic_IO : t
      val _Ukrainian_IE : t
      val _Ukranian_JE : t
      val _Macedonia_DSE : t
      val _Ukrainian_I : t
      val _Ukranian_I : t
      val _Ukrainian_YI : t
      val _Ukranian_YI : t
      val _Cyrillic_JE : t
      val _Serbian_JE : t
      val _Cyrillic_LJE : t
      val _Serbian_LJE : t
      val _Cyrillic_NJE : t
      val _Serbian_NJE : t
      val _Serbian_TSHE : t
      val _Macedonia_KJE : t
      val _Byelorussian_SHORTU : t
      val _Cyrillic_DZHE : t
      val _Serbian_DZE : t
      val _Cyrillic_yu : t
      val _Cyrillic_a : t
      val _Cyrillic_be : t
      val _Cyrillic_tse : t
      val _Cyrillic_de : t
      val _Cyrillic_ie : t
      val _Cyrillic_ef : t
      val _Cyrillic_ghe : t
      val _Cyrillic_ha : t
      val _Cyrillic_i : t
      val _Cyrillic_shorti : t
      val _Cyrillic_ka : t
      val _Cyrillic_el : t
      val _Cyrillic_em : t
      val _Cyrillic_en : t
      val _Cyrillic_o : t
      val _Cyrillic_pe : t
      val _Cyrillic_ya : t
      val _Cyrillic_er : t
      val _Cyrillic_es : t
      val _Cyrillic_te : t
      val _Cyrillic_u : t
      val _Cyrillic_zhe : t
      val _Cyrillic_ve : t
      val _Cyrillic_softsign : t
      val _Cyrillic_yeru : t
      val _Cyrillic_ze : t
      val _Cyrillic_sha : t
      val _Cyrillic_e : t
      val _Cyrillic_shcha : t
      val _Cyrillic_che : t
      val _Cyrillic_hardsign : t
      val _Cyrillic_YU : t
      val _Cyrillic_A : t
      val _Cyrillic_BE : t
      val _Cyrillic_TSE : t
      val _Cyrillic_DE : t
      val _Cyrillic_IE : t
      val _Cyrillic_EF : t
      val _Cyrillic_GHE : t
      val _Cyrillic_HA : t
      val _Cyrillic_I : t
      val _Cyrillic_SHORTI : t
      val _Cyrillic_KA : t
      val _Cyrillic_EL : t
      val _Cyrillic_EM : t
      val _Cyrillic_EN : t
      val _Cyrillic_O : t
      val _Cyrillic_PE : t
      val _Cyrillic_YA : t
      val _Cyrillic_ER : t
      val _Cyrillic_ES : t
      val _Cyrillic_TE : t
      val _Cyrillic_U : t
      val _Cyrillic_ZHE : t
      val _Cyrillic_VE : t
      val _Cyrillic_SOFTSIGN : t
      val _Cyrillic_YERU : t
      val _Cyrillic_ZE : t
      val _Cyrillic_SHA : t
      val _Cyrillic_E : t
      val _Cyrillic_SHCHA : t
      val _Cyrillic_CHE : t
      val _Cyrillic_HARDSIGN : t
      val _Greek_ALPHAaccent : t
      val _Greek_EPSILONaccent : t
      val _Greek_ETAaccent : t
      val _Greek_IOTAaccent : t
      val _Greek_IOTAdiaeresis : t
      val _Greek_OMICRONaccent : t
      val _Greek_UPSILONaccent : t
      val _Greek_UPSILONdieresis : t
      val _Greek_OMEGAaccent : t
      val _Greek_accentdieresis : t
      val _Greek_horizbar : t
      val _Greek_alphaaccent : t
      val _Greek_epsilonaccent : t
      val _Greek_etaaccent : t
      val _Greek_iotaaccent : t
      val _Greek_iotadieresis : t
      val _Greek_iotaaccentdieresis : t
      val _Greek_omicronaccent : t
      val _Greek_upsilonaccent : t
      val _Greek_upsilondieresis : t
      val _Greek_upsilonaccentdieresis : t
      val _Greek_omegaaccent : t
      val _Greek_ALPHA : t
      val _Greek_BETA : t
      val _Greek_GAMMA : t
      val _Greek_DELTA : t
      val _Greek_EPSILON : t
      val _Greek_ZETA : t
      val _Greek_ETA : t
      val _Greek_THETA : t
      val _Greek_IOTA : t
      val _Greek_KAPPA : t
      val _Greek_LAMDA : t
      val _Greek_LAMBDA : t
      val _Greek_MU : t
      val _Greek_NU : t
      val _Greek_XI : t
      val _Greek_OMICRON : t
      val _Greek_PI : t
      val _Greek_RHO : t
      val _Greek_SIGMA : t
      val _Greek_TAU : t
      val _Greek_UPSILON : t
      val _Greek_PHI : t
      val _Greek_CHI : t
      val _Greek_PSI : t
      val _Greek_OMEGA : t
      val _Greek_alpha : t
      val _Greek_beta : t
      val _Greek_gamma : t
      val _Greek_delta : t
      val _Greek_epsilon : t
      val _Greek_zeta : t
      val _Greek_eta : t
      val _Greek_theta : t
      val _Greek_iota : t
      val _Greek_kappa : t
      val _Greek_lamda : t
      val _Greek_lambda : t
      val _Greek_mu : t
      val _Greek_nu : t
      val _Greek_xi : t
      val _Greek_omicron : t
      val _Greek_pi : t
      val _Greek_rho : t
      val _Greek_sigma : t
      val _Greek_finalsmallsigma : t
      val _Greek_tau : t
      val _Greek_upsilon : t
      val _Greek_phi : t
      val _Greek_chi : t
      val _Greek_psi : t
      val _Greek_omega : t
      val _Greek_switch : t
      val _leftradical : t
      val _topleftradical : t
      val _horizconnector : t
      val _topintegral : t
      val _botintegral : t
      val _vertconnector : t
      val _topleftsqbracket : t
      val _botleftsqbracket : t
      val _toprightsqbracket : t
      val _botrightsqbracket : t
      val _topleftparens : t
      val _botleftparens : t
      val _toprightparens : t
      val _botrightparens : t
      val _leftmiddlecurlybrace : t
      val _rightmiddlecurlybrace : t
      val _topleftsummation : t
      val _botleftsummation : t
      val _topvertsummationconnector : t
      val _botvertsummationconnector : t
      val _toprightsummation : t
      val _botrightsummation : t
      val _rightmiddlesummation : t
      val _lessthanequal : t
      val _notequal : t
      val _greaterthanequal : t
      val _integral : t
      val _therefore : t
      val _variation : t
      val _infinity : t
      val _nabla : t
      val _approximate : t
      val _similarequal : t
      val _ifonlyif : t
      val _implies : t
      val _identical : t
      val _radical : t
      val _includedin : t
      val _includes : t
      val _intersection : t
      val _union : t
      val _logicaland : t
      val _logicalor : t
      val _partialderivative : t
      val _function : t
      val _leftarrow : t
      val _uparrow : t
      val _rightarrow : t
      val _downarrow : t
      val _blank : t
      val _soliddiamond : t
      val _checkerboard : t
      val _ht : t
      val _ff : t
      val _cr : t
      val _lf : t
      val _nl : t
      val _vt : t
      val _lowrightcorner : t
      val _uprightcorner : t
      val _upleftcorner : t
      val _lowleftcorner : t
      val _crossinglines : t
      val _horizlinescan1 : t
      val _horizlinescan3 : t
      val _horizlinescan5 : t
      val _horizlinescan7 : t
      val _horizlinescan9 : t
      val _leftt : t
      val _rightt : t
      val _bott : t
      val _topt : t
      val _vertbar : t
      val _emspace : t
      val _enspace : t
      val _em3space : t
      val _em4space : t
      val _digitspace : t
      val _punctspace : t
      val _thinspace : t
      val _hairspace : t
      val _emdash : t
      val _endash : t
      val _signifblank : t
      val _ellipsis : t
      val _doubbaselinedot : t
      val _onethird : t
      val _twothirds : t
      val _onefifth : t
      val _twofifths : t
      val _threefifths : t
      val _fourfifths : t
      val _onesixth : t
      val _fivesixths : t
      val _careof : t
      val _figdash : t
      val _leftanglebracket : t
      val _decimalpoint : t
      val _rightanglebracket : t
      val _marker : t
      val _oneeighth : t
      val _threeeighths : t
      val _fiveeighths : t
      val _seveneighths : t
      val _trademark : t
      val _signaturemark : t
      val _trademarkincircle : t
      val _leftopentriangle : t
      val _rightopentriangle : t
      val _emopencircle : t
      val _emopenrectangle : t
      val _leftsinglequotemark : t
      val _rightsinglequotemark : t
      val _leftdoublequotemark : t
      val _rightdoublequotemark : t
      val _prescription : t
      val _minutes : t
      val _seconds : t
      val _latincross : t
      val _hexagram : t
      val _filledrectbullet : t
      val _filledlefttribullet : t
      val _filledrighttribullet : t
      val _emfilledcircle : t
      val _emfilledrect : t
      val _enopencircbullet : t
      val _enopensquarebullet : t
      val _openrectbullet : t
      val _opentribulletup : t
      val _opentribulletdown : t
      val _openstar : t
      val _enfilledcircbullet : t
      val _enfilledsqbullet : t
      val _filledtribulletup : t
      val _filledtribulletdown : t
      val _leftpointer : t
      val _rightpointer : t
      val _club : t
      val _diamond : t
      val _heart : t
      val _maltesecross : t
      val _dagger : t
      val _doubledagger : t
      val _checkmark : t
      val _ballotcross : t
      val _musicalsharp : t
      val _musicalflat : t
      val _malesymbol : t
      val _femalesymbol : t
      val _telephone : t
      val _telephonerecorder : t
      val _phonographcopyright : t
      val _caret : t
      val _singlelowquotemark : t
      val _doublelowquotemark : t
      val _cursor : t
      val _leftcaret : t
      val _rightcaret : t
      val _downcaret : t
      val _upcaret : t
      val _overbar : t
      val _downtack : t
      val _upshoe : t
      val _downstile : t
      val _underbar : t
      val _jot : t
      val _quad : t
      val _uptack : t
      val _circle : t
      val _upstile : t
      val _downshoe : t
      val _rightshoe : t
      val _leftshoe : t
      val _lefttack : t
      val _righttack : t
      val _hebrew_doublelowline : t
      val _hebrew_aleph : t
      val _hebrew_bet : t
      val _hebrew_beth : t
      val _hebrew_gimel : t
      val _hebrew_gimmel : t
      val _hebrew_dalet : t
      val _hebrew_daleth : t
      val _hebrew_he : t
      val _hebrew_waw : t
      val _hebrew_zain : t
      val _hebrew_zayin : t
      val _hebrew_chet : t
      val _hebrew_het : t
      val _hebrew_tet : t
      val _hebrew_teth : t
      val _hebrew_yod : t
      val _hebrew_finalkaph : t
      val _hebrew_kaph : t
      val _hebrew_lamed : t
      val _hebrew_finalmem : t
      val _hebrew_mem : t
      val _hebrew_finalnun : t
      val _hebrew_nun : t
      val _hebrew_samech : t
      val _hebrew_samekh : t
      val _hebrew_ayin : t
      val _hebrew_finalpe : t
      val _hebrew_pe : t
      val _hebrew_finalzade : t
      val _hebrew_finalzadi : t
      val _hebrew_zade : t
      val _hebrew_zadi : t
      val _hebrew_qoph : t
      val _hebrew_kuf : t
      val _hebrew_resh : t
      val _hebrew_shin : t
      val _hebrew_taw : t
      val _hebrew_taf : t
      val _Hebrew_switch : t
      val _Thai_kokai : t
      val _Thai_khokhai : t
      val _Thai_khokhuat : t
      val _Thai_khokhwai : t
      val _Thai_khokhon : t
      val _Thai_khorakhang : t
      val _Thai_ngongu : t
      val _Thai_chochan : t
      val _Thai_choching : t
      val _Thai_chochang : t
      val _Thai_soso : t
      val _Thai_chochoe : t
      val _Thai_yoying : t
      val _Thai_dochada : t
      val _Thai_topatak : t
      val _Thai_thothan : t
      val _Thai_thonangmontho : t
      val _Thai_thophuthao : t
      val _Thai_nonen : t
      val _Thai_dodek : t
      val _Thai_totao : t
      val _Thai_thothung : t
      val _Thai_thothahan : t
      val _Thai_thothong : t
      val _Thai_nonu : t
      val _Thai_bobaimai : t
      val _Thai_popla : t
      val _Thai_phophung : t
      val _Thai_fofa : t
      val _Thai_phophan : t
      val _Thai_fofan : t
      val _Thai_phosamphao : t
      val _Thai_moma : t
      val _Thai_yoyak : t
      val _Thai_rorua : t
      val _Thai_ru : t
      val _Thai_loling : t
      val _Thai_lu : t
      val _Thai_wowaen : t
      val _Thai_sosala : t
      val _Thai_sorusi : t
      val _Thai_sosua : t
      val _Thai_hohip : t
      val _Thai_lochula : t
      val _Thai_oang : t
      val _Thai_honokhuk : t
      val _Thai_paiyannoi : t
      val _Thai_saraa : t
      val _Thai_maihanakat : t
      val _Thai_saraaa : t
      val _Thai_saraam : t
      val _Thai_sarai : t
      val _Thai_saraii : t
      val _Thai_saraue : t
      val _Thai_sarauee : t
      val _Thai_sarau : t
      val _Thai_sarauu : t
      val _Thai_phinthu : t
      val _Thai_maihanakat_maitho : t
      val _Thai_baht : t
      val _Thai_sarae : t
      val _Thai_saraae : t
      val _Thai_sarao : t
      val _Thai_saraaimaimuan : t
      val _Thai_saraaimaimalai : t
      val _Thai_lakkhangyao : t
      val _Thai_maiyamok : t
      val _Thai_maitaikhu : t
      val _Thai_maiek : t
      val _Thai_maitho : t
      val _Thai_maitri : t
      val _Thai_maichattawa : t
      val _Thai_thanthakhat : t
      val _Thai_nikhahit : t
      val _Thai_leksun : t
      val _Thai_leknung : t
      val _Thai_leksong : t
      val _Thai_leksam : t
      val _Thai_leksi : t
      val _Thai_lekha : t
      val _Thai_lekhok : t
      val _Thai_lekchet : t
      val _Thai_lekpaet : t
      val _Thai_lekkao : t
      val _Hangul : t
      val _Hangul_Start : t
      val _Hangul_End : t
      val _Hangul_Hanja : t
      val _Hangul_Jamo : t
      val _Hangul_Romaja : t
      val _Hangul_Codeinput : t
      val _Hangul_Jeonja : t
      val _Hangul_Banja : t
      val _Hangul_PreHanja : t
      val _Hangul_PostHanja : t
      val _Hangul_SingleCandidate : t
      val _Hangul_MultipleCandidate : t
      val _Hangul_PreviousCandidate : t
      val _Hangul_Special : t
      val _Hangul_switch : t
      val _Hangul_Kiyeog : t
      val _Hangul_SsangKiyeog : t
      val _Hangul_KiyeogSios : t
      val _Hangul_Nieun : t
      val _Hangul_NieunJieuj : t
      val _Hangul_NieunHieuh : t
      val _Hangul_Dikeud : t
      val _Hangul_SsangDikeud : t
      val _Hangul_Rieul : t
      val _Hangul_RieulKiyeog : t
      val _Hangul_RieulMieum : t
      val _Hangul_RieulPieub : t
      val _Hangul_RieulSios : t
      val _Hangul_RieulTieut : t
      val _Hangul_RieulPhieuf : t
      val _Hangul_RieulHieuh : t
      val _Hangul_Mieum : t
      val _Hangul_Pieub : t
      val _Hangul_SsangPieub : t
      val _Hangul_PieubSios : t
      val _Hangul_Sios : t
      val _Hangul_SsangSios : t
      val _Hangul_Ieung : t
      val _Hangul_Jieuj : t
      val _Hangul_SsangJieuj : t
      val _Hangul_Cieuc : t
      val _Hangul_Khieuq : t
      val _Hangul_Tieut : t
      val _Hangul_Phieuf : t
      val _Hangul_Hieuh : t
      val _Hangul_A : t
      val _Hangul_AE : t
      val _Hangul_YA : t
      val _Hangul_YAE : t
      val _Hangul_EO : t
      val _Hangul_E : t
      val _Hangul_YEO : t
      val _Hangul_YE : t
      val _Hangul_O : t
      val _Hangul_WA : t
      val _Hangul_WAE : t
      val _Hangul_OE : t
      val _Hangul_YO : t
      val _Hangul_U : t
      val _Hangul_WEO : t
      val _Hangul_WE : t
      val _Hangul_WI : t
      val _Hangul_YU : t
      val _Hangul_EU : t
      val _Hangul_YI : t
      val _Hangul_I : t
      val _Hangul_J_Kiyeog : t
      val _Hangul_J_SsangKiyeog : t
      val _Hangul_J_KiyeogSios : t
      val _Hangul_J_Nieun : t
      val _Hangul_J_NieunJieuj : t
      val _Hangul_J_NieunHieuh : t
      val _Hangul_J_Dikeud : t
      val _Hangul_J_Rieul : t
      val _Hangul_J_RieulKiyeog : t
      val _Hangul_J_RieulMieum : t
      val _Hangul_J_RieulPieub : t
      val _Hangul_J_RieulSios : t
      val _Hangul_J_RieulTieut : t
      val _Hangul_J_RieulPhieuf : t
      val _Hangul_J_RieulHieuh : t
      val _Hangul_J_Mieum : t
      val _Hangul_J_Pieub : t
      val _Hangul_J_PieubSios : t
      val _Hangul_J_Sios : t
      val _Hangul_J_SsangSios : t
      val _Hangul_J_Ieung : t
      val _Hangul_J_Jieuj : t
      val _Hangul_J_Cieuc : t
      val _Hangul_J_Khieuq : t
      val _Hangul_J_Tieut : t
      val _Hangul_J_Phieuf : t
      val _Hangul_J_Hieuh : t
      val _Hangul_RieulYeorinHieuh : t
      val _Hangul_SunkyeongeumMieum : t
      val _Hangul_SunkyeongeumPieub : t
      val _Hangul_PanSios : t
      val _Hangul_KkogjiDalrinIeung : t
      val _Hangul_SunkyeongeumPhieuf : t
      val _Hangul_YeorinHieuh : t
      val _Hangul_AraeA : t
      val _Hangul_AraeAE : t
      val _Hangul_J_PanSios : t
      val _Hangul_J_KkogjiDalrinIeung : t
      val _Hangul_J_YeorinHieuh : t
      val _Korean_Won : t
    end
  type modifier = Shift | Caps | Ctrl | Alt | Mod2 | Mod3 | Logo | Mod5
  type led = Led_Num | Led_Caps | Led_Scroll
  type modifiers = { leds : Wlc.led list; mods : Wlc.modifier list; }
  type key_state = Key_State_Released | Key_State_Pressed
  type button_state = Button_State_Released | Button_State_Pressed
  type scroll_axis_bit = Vertical | Horizontal
  type touch_type =
      Touch_Down
    | Touch_Up
    | Touch_Motion
    | Touch_Frame
    | Touch_Cancel
  module Geometry :
    sig
      module Origin :
        sig
          type t = { x : int; y : int; }
          val zero : Wlc.Geometry.Origin.t
          val min :
            Wlc.Geometry.Origin.t ->
            Wlc.Geometry.Origin.t -> Wlc.Geometry.Origin.t
          val max :
            Wlc.Geometry.Origin.t ->
            Wlc.Geometry.Origin.t -> Wlc.Geometry.Origin.t
        end
      module Size :
        sig
          type t = { w : int; h : int; }
          val zero : Wlc.Geometry.Size.t
          val min :
            Wlc.Geometry.Size.t -> Wlc.Geometry.Size.t -> Wlc.Geometry.Size.t
          val max :
            Wlc.Geometry.Size.t -> Wlc.Geometry.Size.t -> Wlc.Geometry.Size.t
        end
      type t = {
        origin : Wlc.Geometry.Origin.t;
        size : Wlc.Geometry.Size.t;
      }
      val contains : Wlc.Geometry.t -> Wlc.Geometry.t -> bool
    end
  module Output :
    sig
      type t
      val id : Wlc.Output.t -> int64
      val all : unit -> Wlc.Output.t list
      val get_focused : unit -> Wlc.Output.t
      val get_sleep : Wlc.Output.t -> bool
      val set_sleep : Wlc.Output.t -> bool -> unit
      val get_resolution : Wlc.Output.t -> Wlc.Geometry.Size.t
      val set_resolution : Wlc.Output.t -> Wlc.Geometry.Size.t -> unit
      val get_mask : Wlc.Output.t -> int list
      val set_mask : Wlc.Output.t -> int list -> unit
      val get_pixels :
        Wlc.Output.t ->
        ((int, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
         Bigarray.Array2.t -> unit) ->
        unit
      val focus : Wlc.Output.t option -> unit
    end
  module View :
    sig
      type state_bit = Maximized | Fullscreen | Resizing | Moving | Activated
      type state = Wlc.View.state_bit list
      type type_bit = Override_Redirect | Unmanaged | Splash | Modal | Popup
      type typ = Wlc.View.type_bit list
      type t
      val id : Wlc.View.t -> int64
      val all_of_output : Wlc.Output.t -> Wlc.View.t list
      val set_all_of_output : Wlc.Output.t -> Wlc.View.t list -> bool
      val focus : Wlc.View.t option -> unit
      val close : Wlc.View.t -> unit
      val get_output : Wlc.View.t -> Wlc.Output.t
      val set_output : Wlc.View.t -> Wlc.Output.t -> unit
      val send_to_back : Wlc.View.t -> unit
      val send_below : Wlc.View.t -> Wlc.View.t -> unit
      val bring_above : Wlc.View.t -> Wlc.View.t -> unit
      val bring_to_front : Wlc.View.t -> unit
      val get_mask : Wlc.View.t -> int list
      val set_mask : Wlc.View.t -> int list -> unit
      val get_geometry : Wlc.View.t -> Wlc.Geometry.t
      val set_geometry : Wlc.View.t -> Wlc.Geometry.t -> unit
      val get_type : Wlc.View.t -> Wlc.View.typ
      val set_type : Wlc.View.t -> Wlc.View.type_bit -> bool -> unit
      val get_state : Wlc.View.t -> Wlc.View.state
      val set_state : Wlc.View.t -> Wlc.View.state_bit -> bool -> unit
      val get_parent : Wlc.View.t -> Wlc.View.t option
      val set_parent : Wlc.View.t -> Wlc.View.t option -> unit
      val get_title : Wlc.View.t -> string
      val set_title : Wlc.View.t -> string -> unit
      val get_class : Wlc.View.t -> string option
      val set_class : Wlc.View.t -> string option -> unit
      val get_app_id : Wlc.View.t -> string option
      val set_app_id : Wlc.View.t -> string option -> unit
    end
  module Interface :
    sig
      type output = {
        created : Wlc.Output.t -> bool;
        destroyed : Wlc.Output.t -> unit;
        focus : Wlc.Output.t -> bool -> unit;
        resolution :
          Wlc.Output.t -> Wlc.Geometry.Size.t -> Wlc.Geometry.Size.t -> unit;
      }
      type view_request = {
        geometry : Wlc.View.t -> Wlc.Geometry.t -> unit;
        state : Wlc.View.t -> Wlc.View.state_bit -> bool -> unit;
      }
      type view = {
        created : Wlc.View.t -> bool;
        destroyed : Wlc.View.t -> unit;
        focus : Wlc.View.t -> bool -> unit;
        move_to_output : Wlc.View.t -> Wlc.Output.t -> Wlc.Output.t -> unit;
        request : Wlc.Interface.view_request;
      }
      type keyboard = {
        key :
          Wlc.View.t option ->
          int ->
          Wlc.modifiers -> int -> Wlc.Keysym.t -> Wlc.key_state -> bool;
      }
      type pointer = {
        button :
          Wlc.View.t option ->
          int -> Wlc.modifiers -> int -> Wlc.button_state -> bool;
        scroll :
          Wlc.View.t option ->
          int ->
          Wlc.modifiers -> Wlc.scroll_axis_bit list -> float * float -> bool;
        motion : Wlc.View.t option -> int -> Wlc.Geometry.Origin.t -> bool;
      }
      type touch = {
        touch :
          Wlc.View.t option ->
          int ->
          Wlc.modifiers ->
          Wlc.touch_type -> int -> Wlc.Geometry.Origin.t -> bool;
      }
      type compositor = { ready : unit -> unit; }
      type t = {
        output : Wlc.Interface.output;
        view : Wlc.Interface.view;
        keyboard : Wlc.Interface.keyboard;
        pointer : Wlc.Interface.pointer;
        touch : Wlc.Interface.touch;
        compositor : Wlc.Interface.compositor;
      }
      val dummy : Wlc.Interface.t
    end
  val init : Wlc.Interface.t -> unit
  val terminate : unit -> unit
  val run : unit -> unit
  val log : string -> unit
end