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_F | KEY_BACKSPACE | KEY_CTRL_S | KEY_CTRL_L | KEY_CTRL_E | KEY_CTRL_C | KEY_ESC | NUM of int | ARROW_UP | ARROW_LEFT | ARROW_RIGHT | ARROW_DOWN | KEY_ENTER | KEY_SPACE | USE_LAYERS of {tree: LayerTree.t, canvasWidth: int, canvasHeight: int} | SQUARES_LOAD_ERROR end