sig
  module W :
    sig
      type 'a t = 'a
      val return : '-> 'a t
      type ('a, 'b) ft = '-> 'b
      val fmap : ('a, 'b) ft -> 'a t -> 'b t
      type 'a tlist = 'a list
      val nil : unit -> 'a tlist
      val singleton : 'a t -> 'a tlist
      val cons : 'a t -> 'a tlist -> 'a tlist
      val append : 'a tlist -> 'a tlist -> 'a tlist
      val map : ('a, 'b) ft -> 'a tlist -> 'b tlist
    end
  type uri = string
  val uri_of_string : uri -> string
  val string_of_uri : string -> uri
  val uri_of_fun : (unit -> string) -> uri
  type aname = string
  type attrib
  type caml_event_handler =
      CE_registered_closure of string * Eliom_lib.poly
    | CE_client_closure of
        (Js_of_ocaml.Dom_html.event Js_of_ocaml.Js.t -> unit)
    | CE_client_closure_mouse of
        (Js_of_ocaml.Dom_html.mouseEvent Js_of_ocaml.Js.t -> unit)
    | CE_client_closure_keyboard of
        (Js_of_ocaml.Dom_html.keyboardEvent Js_of_ocaml.Js.t -> unit)
    | CE_client_closure_touch of
        (Js_of_ocaml.Dom_html.touchEvent Js_of_ocaml.Js.t -> unit)
    | CE_call_service of
        ([ `A | `Form_get | `Form_post ] * (bool * string list) option *
         string option * Ocsigen_lib_base.poly)
        option Eliom_lazy.request
  type internal_event_handler = Raw of string | Caml of caml_event_handler
  type event_handler = Js_of_ocaml.Dom_html.event Js_of_ocaml.Js.t -> unit
  type mouse_event_handler =
      Js_of_ocaml.Dom_html.mouseEvent Js_of_ocaml.Js.t -> unit
  type keyboard_event_handler =
      Js_of_ocaml.Dom_html.keyboardEvent Js_of_ocaml.Js.t -> unit
  type touch_event_handler =
      Js_of_ocaml.Dom_html.touchEvent Js_of_ocaml.Js.t -> unit
  type ename = string
  type elt
  type 'a wrap = 'a
  type 'a list_wrap = 'a list
  type econtent = private
      Empty
    | Comment of string
    | EncodedPCDATA of string
    | PCDATA of string
    | Entity of string
    | Leaf of ename * attrib list
    | Node of ename * attrib list * elt list
  val internal_event_handler_of_service :
    ([ `A | `Form_get | `Form_post ] * (bool * string list) option *
     string option * Eliom_lib.poly)
    option Eliom_lazy.request -> internal_event_handler
  type separator = Space | Comma
  type acontent = private
      AFloat of float
    | AInt of int
    | AStr of string
    | AStrL of separator * string list
  val acontent : attrib -> acontent
  type racontent =
      RA of acontent
    | RAReact of acontent option React.signal
    | RACamlEventHandler of caml_event_handler
    | RALazyStr of string Eliom_lazy.request
    | RALazyStrL of separator * string Eliom_lazy.request list
    | RAClient of string * attrib option * Eliom_lib.poly
  val racontent : attrib -> racontent
  val aname : attrib -> aname
  val float_attrib : aname -> float -> attrib
  val int_attrib : aname -> int -> attrib
  val string_attrib : aname -> string -> attrib
  val space_sep_attrib : aname -> string list -> attrib
  val comma_sep_attrib : aname -> string list -> attrib
  val internal_event_handler_attrib :
    aname -> internal_event_handler -> attrib
  val event_handler_attrib : aname -> event_handler -> attrib
  val mouse_event_handler_attrib : aname -> mouse_event_handler -> attrib
  val keyboard_event_handler_attrib :
    aname -> keyboard_event_handler -> attrib
  val touch_event_handler_attrib : aname -> touch_event_handler -> attrib
  val uri_attrib : aname -> uri -> attrib
  val uris_attrib : aname -> uri list -> attrib
  val content : elt -> econtent
  val pcdata : string -> elt
  val encodedpcdata : string -> elt
  val entity : string -> elt
  val empty : unit -> elt
  val comment : string -> elt
  val leaf : ?a:attrib list -> ename -> elt
  val node : ?a:attrib list -> ename -> elt list -> elt
  val lazy_node :
    ?a:attrib list -> ename -> elt list Eliom_lazy.request -> elt
  val cdata : string -> elt
  val cdata_script : string -> elt
  val cdata_style : string -> elt
  type node_id = NoId | ProcessId of string | RequestId of string
  val string_of_node_id : node_id -> string
  val make : ?id:node_id -> econtent -> elt
  val make_dom : ?id:node_id -> Js_of_ocaml.Dom.node Js_of_ocaml.Js.t -> elt
  val make_lazy : ?id:node_id -> elt lazy_t -> elt
  val force_lazy : elt -> unit
  val make_react : ?id:node_id -> elt React.signal -> elt
  val make_process_node : ?id:string -> elt -> elt
  val make_request_node : ?reset:bool -> elt -> elt
  val get_node_id : elt -> node_id
  type node =
      DomNode of Js_of_ocaml.Dom.node Js_of_ocaml.Js.t
    | TyXMLNode of econtent
    | ReactNode of elt React.signal
    | ReactChildren of econtent * elt ReactiveData.RList.t
  val get_node : elt -> node
  val set_dom_node : elt -> Js_of_ocaml.Dom.node Js_of_ocaml.Js.t -> unit
  val set_classes_of_elt : elt -> elt
end