structure InputMessage = struct datatype t = MOUSE_MOVE of {x: Real32.real, y: Real32.real} | MOUSE_LEFT_CLICK | MOUSE_LEFT_RELEASE | RESIZE_WINDOW of {width: int, height: int} | UNDO_ACTION | REDO_ACTION | KEY_R | KEY_G | KEY_B | KEY_T | KEY_A | KEY_W | KEY_H | KEY_M | KEY_C | KEY_L | KEY_BACKSPACE | KEY_CTRL_S | KEY_CTRL_L | KEY_CTRL_E | KEY_CTRL_O | KEY_CTRL_C | KEY_ESC | NUM of int | ARROW_UP | ARROW_LEFT | ARROW_RIGHT | ARROW_DOWN | KEY_ENTER | KEY_SPACE | USE_SQUARES of { squares: {r: int, g: int, b: int, a: int} vector vector , canvasWidth: int , canvasHeight: int } | SQUARES_LOAD_ERROR | FILE_BROWSER_AND_PATH of {fileBrowser: AppType.file_browser_item vector, path: string} end