type 'msg onesub = | SubTick of Time.posix -> 'msg| SubMouseMove of (float * float) -> 'msg| SubMouseDown of unit -> 'msg| SubMouseUp of unit -> 'msg| SubKeyDown of Keyboard.key -> 'msg| SubKeyUp of Keyboard.key -> '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_down : (unit -> 'msg) -> 'msg tval on_mouse_up : (unit -> 'msg) -> 'msg ttype event = | ETick of float| EMouseMove of int * int| EMouseButton of bool| EKeyChanged of bool * Keyboard.key
val find_map_opt : ('a -> 'b option) -> 'a list -> 'b optionval event_to_msgopt : event -> 'a onesub list -> 'a option