sig
  module R :
    sig
      type buffer = R.buffer
      val create_buffer : float -> Renderer.display -> buffer
      val begin_draw : buffer -> unit
      val end_draw : buffer -> unit
      val clear : buffer -> unit
      val event_queue : buffer -> Renderer.event list
      val width : buffer -> int
      val height : buffer -> int
      val render : buffer -> Shape.t -> unit
    end
  val display : [> `Size of int * int ]
  val loop : '-> '-> 'b
  val draw : '-> '-> Shape.t
  val mouse_pressed : '-> '-> 'b
  val mouse_released : '-> '-> 'b
  val mouse_moved : '-> '-> 'b
  val mouse_dragged : '-> '-> 'b
  val mouse_clicked : '-> '-> 'b
  val mouse_scrolled : '-> '-> 'b
  val key_pressed : '-> '-> 'b
  val key_released : '-> '-> 'b
  val key_typed : '-> '-> 'b
  val window_resized : '-> '-> 'b
  val window_closed : '-> '-> 'c
end