private opaque DisplayP : NonemptyType def Display : Type := DisplayP.type instance : Nonempty Display := DisplayP.property @[extern "waylean_display_new"] opaque Display.new : (name : @& Option String) → IO Display @[extern "waylean_display_roundtrip"] opaque Display.roundtrip : (display : @& Display) → IO Unit private opaque EventLoopP : NonemptyType def EventLoop : Type := EventLoopP.type instance : Nonempty EventLoop := EventLoopP.property private opaque EventSourceP : NonemptyType def EventSource : Type := EventSourceP.type instance : Nonempty EventSource := EventSourceP.property @[extern "waylean_event_loop_new"] opaque EventLoop.new : IO EventLoop @[extern "waylean_event_loop_add_display"] opaque EventLoop.addDisplay : (eventLoop : @& EventLoop) → (display : @& Display) → IO EventSource @[extern "waylean_event_loop_add_timer"] opaque EventLoop.addTimer : (eventLoop : @& EventLoop) → (delayMs : UInt32) → (msg : @& IO Unit) → IO EventSource @[extern "waylean_event_loop_add_signal"] opaque EventLoop.addSignal : (eventLoop : @& EventLoop) → (signum : UInt32) → (msg : @& IO Unit) → IO EventSource @[extern "waylean_event_loop_remove"] opaque EventLoop.remove : (eventLoop : @& EventLoop) → (source : @& EventSource) → IO Unit @[extern "waylean_event_loop_quit"] opaque EventLoop.quit : (eventLoop : @& EventLoop) → IO Unit @[extern "waylean_event_loop_poll"] opaque EventLoop.poll : (eventLoop : @& EventLoop) → IO (Option (IO Unit))