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 Html5 :
    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 ->
        unit -> Html5_types.head Eliom_content.Html5.elt
    end
  module Xhtml :
    sig
      val menu :
        ?classe:Xhtml_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 *
        Xhtml_types.a_content Eliom_content.Xhtml.F.elt list ->
        (('a, 'b, 'c) Eliom_tools.one_page *
         Xhtml_types.a_content Eliom_content.Xhtml.F.elt list)
        list ->
        ?service:('a, 'b, 'c) Eliom_tools.one_page ->
        unit -> [> `Ul ] Eliom_content.Xhtml.F.elt
      val hierarchical_menu_depth_first :
        ?classe:Xhtml_types.nmtoken list ->
        ?id:string ->
        ?whole_tree:bool ->
        ([< Eliom_service.get_service_kind ] as 'a,
         [< Eliom_service.registrable ] as 'b,
         Xhtml_types.a_content Eliom_content.Xhtml.F.elt list)
        Eliom_tools.hierarchical_site ->
        ?service:('a, 'b, [< Eliom_registration.non_caml_service ])
                 Eliom_tools.one_page ->
        unit -> [> `Ul ] Eliom_content.Xhtml.F.elt list
      val hierarchical_menu_breadth_first :
        ?classe:Xhtml_types.nmtoken list ->
        ?id:string ->
        ([< Eliom_service.get_service_kind ] as 'a,
         [< Eliom_service.registrable ] as 'b,
         Xhtml_types.a_content Eliom_content.Xhtml.F.elt list)
        Eliom_tools.hierarchical_site ->
        ?service:('a, 'b, [< Eliom_registration.non_caml_service ])
                 Eliom_tools.one_page ->
        unit -> [> `Ul ] Eliom_content.Xhtml.F.elt list
      val structure_links :
        ([< Eliom_service.get_service_kind ] as 'a,
         [< Eliom_service.registrable ] as 'b,
         Xhtml_types.a_content Eliom_content.Xhtml.F.elt list)
        Eliom_tools.hierarchical_site ->
        ?service:('a, 'b, [< Eliom_registration.non_caml_service ])
                 Eliom_tools.one_page ->
        unit -> [> `Link ] Eliom_content.Xhtml.F.elt list
      val head :
        title:string ->
        ?css:string list list ->
        ?js:string list list ->
        unit -> Xhtml_types.head Eliom_content.Xhtml.F.elt
    end
end