sig
  type json = Json.t
  type kind = [ `EXEC | `GET | `SET ]
  val string_of_kind : Main.kind -> string
  val pp_kind : Stdlib.Format.formatter -> Main.kind -> unit
  val register : Main.kind -> string -> (Main.json -> Main.json) -> unit
  val find : string -> (Main.kind * (Main.json -> Main.json)) option
  val exec : string -> Main.json -> Main.json
  type signal
  val signal : string -> Main.signal
  type 'a request =
      [ `Kill of 'a
      | `Poll
      | `Request of 'a * string * Main.json
      | `Shutdown
      | `SigOff of string
      | `SigOn of string ]
  type 'a response =
      [ `Data of 'a * Main.json
      | `Error of 'a * string
      | `Killed of 'a
      | `Rejected of 'a
      | `Signal of string ]
  type 'a message = {
    requests : 'Main.request list;
    callback : 'Main.response list -> unit;
  }
  type 'a server
  val create :
    pretty:(Stdlib.Format.formatter -> '-> unit) ->
    ?equal:('-> '-> bool) ->
    fetch:(unit -> 'Main.message option) -> unit -> 'Main.server
  val run : 'Main.server -> unit
  val start : 'Main.server -> unit
  val stop : 'Main.server -> unit
  val kill : unit -> 'a
  val emit : Main.signal -> unit
  val on_signal : Main.signal -> (bool -> unit) -> unit
  val on : (bool -> unit) -> unit
end