type 'msg onesub = | SubTick of Time.posix -> 'msg| SubMouseMove of (float * float) -> 'msg| SubMouseMoveBy of (float * float) -> 'msg| SubMouseDown of unit -> 'msg| SubMouseUp of unit -> 'msg| SubRightMouseDown of unit -> 'msg| SubRightMouseUp of unit -> 'msg| SubKeyDown of Keyboard.key -> 'msg| SubKeyUp of Keyboard.key -> 'msg| SubTyped of string -> 'msg| SubMouseWheel of float -> 'msg| SubMouseDouble of unit -> 'msg| SubResize of int -> int -> 'msg
type 'msg t = 'msg onesub listval batch : 'a list list -> 'a listval on_animation_frame : (Time.posix -> 'msg) -> 'msg tval on_mouse_move : ((float * float) -> 'msg) -> 'msg tval on_mouse_move_by : ((float * float) -> 'msg) -> 'msg tval on_mouse_down : (unit -> 'msg) -> 'msg tval on_mouse_up : (unit -> 'msg) -> 'msg tval on_right_mouse_down : (unit -> 'msg) -> 'msg tval on_right_mouse_up : (unit -> 'msg) -> 'msg tval on_typed : (string -> 'msg) -> 'msg tval on_mouse_wheel : (float -> 'msg) -> 'msg tval on_mouse_double : (unit -> 'msg) -> 'msg tval on_resize : (int -> int -> 'msg) -> 'msg ttype event = | ETick of float| EMouseMove of int * int| EMouseMoveBy of float * float| EMouseButton of bool| ERightMouseButton of bool| EKeyChanged of bool * Keyboard.key| ETyped of string| EMouseWheel of float| EMouseDouble| EResized of int * int
val find_map_opt : ('a -> 'b option) -> 'a list -> 'b optionval event_to_msgopt : event -> 'a onesub list -> 'a option