sig
  type 'a callback = ('-> unit) -> unit
  val register_value :
    page:Server.Doc.page ->
    name:string ->
    descr:Markdown.text ->
    ?details:Markdown.block ->
    output:'Server.Request.output ->
    get:(unit -> 'a) ->
    ?add_hook:unit Server.States.callback -> unit -> Server.Request.signal
  val register_state :
    page:Server.Doc.page ->
    name:string ->
    descr:Markdown.text ->
    ?details:Markdown.block ->
    data:'Server.Data.data ->
    get:(unit -> 'a) ->
    set:('-> unit) ->
    ?add_hook:unit Server.States.callback -> unit -> Server.Request.signal
  type 'a model
  val model : unit -> 'Server.States.model
  val column :
    model:'Server.States.model ->
    name:string ->
    descr:Markdown.text ->
    data:'Server.Request.output -> get:('-> 'b) -> unit -> unit
  type 'a array
  val reload : 'Server.States.array -> unit
  val update : 'Server.States.array -> '-> unit
  val remove : 'Server.States.array -> '-> unit
  val signal : 'Server.States.array -> Server.Request.signal
  val register_array :
    page:Server.Doc.page ->
    name:string ->
    descr:Markdown.text ->
    ?details:Markdown.block ->
    key:('-> string) ->
    iter:'Server.States.callback ->
    ?add_update_hook:'Server.States.callback ->
    ?add_remove_hook:'Server.States.callback ->
    ?add_reload_hook:unit Server.States.callback ->
    'Server.States.model -> 'Server.States.array
end