functor (R : Renderer.Renderer->
  sig
    val string_of_char : char -> string
    val char_of_string : string -> char
    val ( ~. ) : int -> float
    module Math = Math.Math
    module Vector = Math.Vector
    type vector = Vector.t
    type keys = Set.Make(Uchar).t
    type config =
      Config.config = {
      width : int;
      height : int;
      display_width : int;
      display_height : int;
      mouse_x : int;
      mouse_y : int;
      pmouse_x : int;
      pmouse_y : int;
      mouse_scroll : int;
      mouse_pressed : bool;
      mouse_button : [ `Center | `Left | `Right ];
      key : char;
      keys : keys;
      key_unicode : Uchar.t;
      key_pressed : bool;
      frame_count : int;
      frame_rate : float;
    }
    val check_key : config -> char -> bool
    val check_key_uchar : config -> Uchar.t -> bool
    val get_keys : config -> char list
    val get_keys_uchar : config -> Uchar.t list
    exception Exit
    type color =
      Color.color = {
      red : int;
      green : int;
      blue : int;
      alpha : int;
    }
    val rgb : int -> int -> int -> color
    val rgba : int -> int -> int -> int -> color
    val gray : int -> color
    val graya : int -> int -> color
    val hsv : int -> int -> int -> color
    val hsva : int -> int -> int -> int -> color
    val hex : string -> color
    module Key = Key.Key
    module KeyUnicode = Key.KeyUnicode
    type tag = Shape.tag = ..
    type tag += TName of string
    type vertex =
      Shape.vertex = private
        MoveTo of Math.vector
      | LineTo of Math.vector
      | BezierTo of Math.vector * Math.vector * Math.vector
      | Arc of Math.vector * Math.vector * float * float * float
      | ClosePath
    type t =
      Shape.t = private
        Shape of vertex list
      | Group of t list
      | Paint of t * Paint.paint_update
      | Tag of t * tag
      | Background of Color.color
      | Empty
    val poly : ?close:[ `Close | `Open ] -> Math.vector list -> t
    val point : Math.vector -> t
    val line : Math.vector -> Math.vector -> t
    val rect :
      Math.vector -> ?align:[ `Center | `Corner ] -> Math.vector -> t
    val quad : Math.vector -> Math.vector -> Math.vector -> Math.vector -> t
    val triangle : Math.vector -> Math.vector -> Math.vector -> t
    val ellipse :
      Math.vector -> ?align:[ `Center | `Corner ] -> Math.vector -> t
    val circle : Math.vector -> ?align:[ `Center | `Corner ] -> float -> t
    val arc :
      Math.vector ->
      ?align:[ `Center | `Corner ] ->
      Math.vector ->
      ?stroke_mode:[ `Closed | `Open ] ->
      ?fill_mode:[ `Chord | `Pie ] -> ?phi:float -> float -> float -> t
    val bezier : Bezier.t -> t
    val group : t list -> t
    val shape : t -> Math.vector -> t
    val background : Color.color -> t
    val empty : t
    val fill : Color.color -> t -> t
    val no_fill : t -> t
    val stroke : Color.color -> t -> t
    val no_stroke : t -> t
    val stroke_weight : float -> t -> t
    val stroke_cap : [ `Project | `Round | `Square ] -> t -> t
    val stroke_join : [ `Bevel | `Miter | `Round ] -> t -> t
    val bleach : t -> t
    val name : string -> t -> t
    val find_name : string -> t -> t option
    val find_names : string -> t -> t list
    val tag : tag -> t -> t
    val find_tag : ?eq:(tag -> tag -> bool) -> tag -> t -> t option
    val find_tags : ?eq:(tag -> tag -> bool) -> tag -> t -> t list
    val translate : Math.vector -> t -> t
    val scale : Math.vector -> t -> t
    val rotate : float -> t -> t
    module Dynamic = Runner.Dynamic
    module Runner = Runner.Runner
    val run_sketch : (module Sketch.Sketch-> unit
    module Dict = Core.Dict
    module type Sketch = Sketch.Sketch
    module Base :
      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
  end