sig
  type ('a, 'b, 'c) one_page =
      (unit, unit, 'a, [ `WithoutSuffix ], unit, unit, 'b, 'c)
      Eliom_service.service
    constraint 'b = [< Eliom_service.registrable ]
    constraint 'c = [< Eliom_registration.non_caml_service ]
  type get_page =
      (Eliom_service.get_service_kind, Eliom_service.registrable,
       Eliom_registration.non_caml_service)
      Eliom_tools.one_page
  type ('a, 'b, 'c) hierarchical_site =
      ('a, 'b) Eliom_tools.main_page *
      ('c * ('a, 'b, 'c) Eliom_tools.hierarchical_site_item) list
    constraint 'b = [< Eliom_service.registrable ]
  and ('a, 'b) main_page =
      Main_page of
        ('a, 'b, Eliom_registration.non_caml_service) Eliom_tools.one_page
    | Default_page of
        ('a, 'b, Eliom_registration.non_caml_service) Eliom_tools.one_page
    | Not_clickable constraint 'b = [< Eliom_service.registrable ]
  and ('a, 'b, 'c) hierarchical_site_item =
      Disabled
    | Site_tree of ('a, 'b, 'c) Eliom_tools.hierarchical_site
    constraint 'b = [< Eliom_service.registrable ]
  module type HTML5_TOOLS =
    sig
      val menu :
        ?classe:Html5_types.nmtoken list ->
        ?id:string ->
        (([< Eliom_service.get_service_kind ] as 'a,
          [< Eliom_service.registrable ] as 'b,
          [< Eliom_registration.non_caml_service ] as 'c)
         Eliom_tools.one_page *
         Html5_types.flow5_without_interactive Eliom_content.Html5.elt list)
        list ->
        ?service:('a, 'b, 'c) Eliom_tools.one_page ->
        unit -> [> `Ul ] Eliom_content.Html5.elt
      val hierarchical_menu_depth_first :
        ?classe:Html5_types.nmtoken list ->
        ?id:string ->
        ?whole_tree:bool ->
        ([< Eliom_service.get_service_kind ] as 'a,
         [< Eliom_service.registrable ] as 'b,
         Html5_types.a_content Eliom_content.Html5.elt list)
        Eliom_tools.hierarchical_site ->
        ?service:('a, 'b, [< Eliom_registration.non_caml_service ])
                 Eliom_tools.one_page ->
        unit -> [> `Ul ] Eliom_content.Html5.elt list
      val hierarchical_menu_breadth_first :
        ?classe:Html5_types.nmtoken list ->
        ?id:string ->
        ([< Eliom_service.get_service_kind ] as 'a,
         [< Eliom_service.registrable ] as 'b,
         Html5_types.a_content Eliom_content.Html5.elt list)
        Eliom_tools.hierarchical_site ->
        ?service:('a, 'b, [< Eliom_registration.non_caml_service ])
                 Eliom_tools.one_page ->
        unit -> [> `Ul ] Eliom_content.Html5.elt list
      val structure_links :
        ([< Eliom_service.get_service_kind ] as 'a,
         [< Eliom_service.registrable ] as 'b,
         Html5_types.a_content Eliom_content.Html5.elt list)
        Eliom_tools.hierarchical_site ->
        ?service:('a, 'b, [< Eliom_registration.non_caml_service ])
                 Eliom_tools.one_page ->
        unit -> [> `Link ] Eliom_content.Html5.elt list
      val head :
        title:string ->
        ?css:string list list ->
        ?js:string list list ->
        ?other:Html5_types.head_content_fun Eliom_content.Html5.elt list ->
        unit -> Html5_types.head Eliom_content.Html5.elt
      val html :
        title:string ->
        ?a:Html5_types.html_attrib Eliom_content.Html5.attrib list ->
        ?css:string list list ->
        ?js:string list list ->
        ?other_head:Html5_types.head_content_fun Eliom_content.Html5.elt list ->
        Html5_types.body Eliom_content.Html5.elt ->
        Html5_types.html Eliom_content.Html5.elt
    end
  module F : HTML5_TOOLS
  module D : HTML5_TOOLS
  val with_js_file : string list -> unit
  val with_css_file : string list -> unit
  val wrap_handler :
    (unit -> 'a option Lwt.t) ->
    ('get -> 'post -> 'res Lwt.t) ->
    ('-> 'get -> 'post -> 'res Lwt.t) -> 'get -> 'post -> 'res Lwt.t
end