functor (R : Renderer.Renderer->
  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