sig
  exception Not_X
  exception Not_Wayland
  type cb = unit -> unit
  type task_cb = unit -> bool
  type timeline_cb = float -> bool
  type timer
  type window
  type evas
  type x_window
  type wl_window
  type pos_map =
      [ `accelerate
      | `accelerate_factor
      | `bounce
      | `cubic_bezier
      | `decelerate
      | `decelerate_factor
      | `divisor_interp
      | `linear
      | `sinusoidal
      | `sinusoidal_factor
      | `spring ]
  type 'a event_type
  type 'a event_handler_cb = 'Ecore.event_type -> '-> bool
  type event_handler
  type event
  type animator
  val x_window_focus : Ecore.x_window -> unit
  val main_loop_thread_safe_call_async : Ecore.cb -> unit
  val main_loop_thread_safe_call_sync : Ecore.cb -> unit
  val call : (unit -> 'a) -> 'a
  val event_type_new : unit -> 'Ecore.event_type
  val event_handler_add :
    'Ecore.event_type -> 'Ecore.event_handler_cb -> Ecore.event_handler
  val event_handler_del : Ecore.event_handler -> unit
  val event_add : 'Ecore.event_type -> '-> ('-> unit) -> Ecore.event
  val event_del : Ecore.event -> unit
  val time_get : unit -> float
  val time_unix_get : unit -> float
  val loop_time_get : unit -> float
end