sig
  module type TYPES =
    sig
      type get = Get_method
      type put = Put_method
      type post = Post_method
      type delete = Delete_method
      type co = Co
      type non_co = Non_co
      type ext = Ext
      type non_ext = Non_ext
      type http = Http_ret
      type 'a ocaml = Ocaml of 'a
      type non_ocaml = Non_ocaml
      type reg = Reg
      type non_reg = Non_reg
      type ('get, 'a, 'gn) params =
          ('get, 'a, 'gn) Eliom_parameter.params_type
        constraint 'a = [< `WithSuffix | `WithoutSuffix ]
      type ('m, _, _, _, _, _, _) meth =
          Get :
            ('gp, 'a, 'gn) Eliom_service_sigs.TYPES.params -> (Eliom_service_sigs.TYPES.get,
                                                               'gp, 'gn,
                                                               unit, 
                                                               unit,
                                                               [< `WithSuffix
                                                                | `WithoutSuffix
                                                               ] as 'a, 
                                                               unit)
                                                              Eliom_service_sigs.TYPES.meth
        | Post : ('gp, 'b, 'gn) Eliom_service_sigs.TYPES.params *
            ('pp, [ `WithoutSuffix ], 'pn) Eliom_service_sigs.TYPES.params -> 
            (Eliom_service_sigs.TYPES.post, 'gp, 'gn, 'pp, 'pn,
             [< `WithSuffix | `WithoutSuffix ] as 'b, 'gp)
            Eliom_service_sigs.TYPES.meth
        | Put :
            ('gp, 'c, 'gn) Eliom_service_sigs.TYPES.params -> (Eliom_service_sigs.TYPES.put,
                                                               'gp, 'gn,
                                                               Eliom_parameter.raw_post_data,
                                                               Eliom_parameter.no_param_name,
                                                               [< `WithSuffix
                                                                | `WithoutSuffix
                                                               ] as 'c, 
                                                               unit)
                                                              Eliom_service_sigs.TYPES.meth
        | Delete :
            ('gp, 'd, 'gn) Eliom_service_sigs.TYPES.params -> (Eliom_service_sigs.TYPES.delete,
                                                               'gp, 'gn,
                                                               Eliom_parameter.raw_post_data,
                                                               Eliom_parameter.no_param_name,
                                                               [< `WithSuffix
                                                                | `WithoutSuffix
                                                               ] as 'd, 
                                                               unit)
                                                              Eliom_service_sigs.TYPES.meth
      type 'm which_meth =
          Get' :
            Eliom_service_sigs.TYPES.get Eliom_service_sigs.TYPES.which_meth
        | Post' :
            Eliom_service_sigs.TYPES.post Eliom_service_sigs.TYPES.which_meth
        | Put' :
            Eliom_service_sigs.TYPES.put Eliom_service_sigs.TYPES.which_meth
        | Delete' :
            Eliom_service_sigs.TYPES.delete
            Eliom_service_sigs.TYPES.which_meth
    end
  module type S =
    sig
      type get = Get_method
      type put = Put_method
      type post = Post_method
      type delete = Delete_method
      type co = Co
      type non_co = Non_co
      type ext = Ext
      type non_ext = Non_ext
      type http = Http_ret
      type 'a ocaml = Ocaml of 'a
      type non_ocaml = Non_ocaml
      type reg = Reg
      type non_reg = Non_reg
      type ('get, 'a, 'gn) params =
          ('get, 'a, 'gn) Eliom_parameter.params_type
        constraint 'a = [< `WithSuffix | `WithoutSuffix ]
      type ('m, _, _, _, _, _, _) meth =
          Get :
            ('gp, 'a, 'gn) params -> (get, 'gp, 'gn, unit, unit,
                                      [< `WithSuffix | `WithoutSuffix ] as 'a,
                                      unit)
                                     meth
        | Post : ('gp, 'b, 'gn) params *
            ('pp, [ `WithoutSuffix ], 'pn) params -> (post, 'gp, 'gn, 'pp,
                                                      'pn,
                                                      [< `WithSuffix
                                                       | `WithoutSuffix ]
                                                      as 'b, 'gp)
                                                     meth
        | Put :
            ('gp, 'c, 'gn) params -> (put, 'gp, 'gn,
                                      Eliom_parameter.raw_post_data,
                                      Eliom_parameter.no_param_name,
                                      [< `WithSuffix | `WithoutSuffix ] as 'c,
                                      unit)
                                     meth
        | Delete :
            ('gp, 'd, 'gn) params -> (delete, 'gp, 'gn,
                                      Eliom_parameter.raw_post_data,
                                      Eliom_parameter.no_param_name,
                                      [< `WithSuffix | `WithoutSuffix ] as 'd,
                                      unit)
                                     meth
      type 'm which_meth =
          Get' : get which_meth
        | Post' : post which_meth
        | Put' : put which_meth
        | Delete' : delete which_meth
      type att
      type non_att
      type 'a attached_info =
          Attached :
            Eliom_service_sigs.S.att -> Eliom_service_sigs.S.att
                                        Eliom_service_sigs.S.attached_info
        | Nonattached :
            Eliom_service_sigs.S.non_att -> Eliom_service_sigs.S.non_att
                                            Eliom_service_sigs.S.attached_info
      type ('get, 'post, 'meth, 'attached, 'co, 'ext, 'reg, +'a, 'gn, 'pn,
            'ret)
           t
        constraint 'a = [< `WithSuffix | `WithoutSuffix ]
      and result =
          No_contents
        | Dom of Js_of_ocaml.Dom_html.element Js_of_ocaml.Js.t
        | Redirect :
            (unit, unit, get, 'a, 'b, 'c, 'd, [ `WithoutSuffix ], unit, 
             unit, non_ocaml)
            Eliom_service_sigs.S.t -> Eliom_service_sigs.S.result
        | Reload_action of { hidden : bool; https : bool; }
      type unit_service =
          (unit, unit, get, Eliom_service_sigs.S.att, non_co, non_ext,
           non_reg, [ `WithoutSuffix ], unit, unit, non_ocaml)
          Eliom_service_sigs.S.t
      type (_, _, _) path_option =
          Path :
            Eliom_lib.Url.path -> (Eliom_service_sigs.S.att, non_co, 'a)
                                  Eliom_service_sigs.S.path_option
        | No_path :
            (Eliom_service_sigs.S.non_att, co, unit)
            Eliom_service_sigs.S.path_option
      val reload_action :
        (unit, unit, get, Eliom_service_sigs.S.non_att, co, non_ext, 
         non_reg, [ `WithoutSuffix ], unit, unit, non_ocaml)
        Eliom_service_sigs.S.t
      val reload_action_https :
        (unit, unit, get, Eliom_service_sigs.S.non_att, co, non_ext, 
         non_reg, [ `WithoutSuffix ], unit, unit, non_ocaml)
        Eliom_service_sigs.S.t
      val reload_action_hidden :
        (unit, unit, get, Eliom_service_sigs.S.non_att, co, non_ext, 
         non_reg, [ `WithoutSuffix ], unit, unit, non_ocaml)
        Eliom_service_sigs.S.t
      val reload_action_https_hidden :
        (unit, unit, get, Eliom_service_sigs.S.non_att, co, non_ext, 
         non_reg, [ `WithoutSuffix ], unit, unit, non_ocaml)
        Eliom_service_sigs.S.t
      val static_dir :
        unit ->
        (string list, unit, get, Eliom_service_sigs.S.att, non_co, non_ext,
         non_reg, [ `WithSuffix ],
         [ `One of string list ] Eliom_parameter.param_name, unit, non_ocaml)
        Eliom_service_sigs.S.t
      val https_static_dir :
        unit ->
        (string list, unit, get, Eliom_service_sigs.S.att, non_co, non_ext,
         non_reg, [ `WithSuffix ],
         [ `One of string list ] Eliom_parameter.param_name, unit, non_ocaml)
        Eliom_service_sigs.S.t
      val static_dir_with_params :
        ?keep_nl_params:[ `All | `None | `Persistent ] ->
        get_params:('a, [ `WithoutSuffix ], 'an) Eliom_parameter.params_type ->
        unit ->
        (string list * 'a, unit, get, Eliom_service_sigs.S.att, non_co,
         non_ext, non_reg, [ `WithSuffix ],
         [ `One of string list ] Eliom_parameter.param_name * 'an, unit,
         non_ocaml)
        Eliom_service_sigs.S.t
      val https_static_dir_with_params :
        ?keep_nl_params:[ `All | `None | `Persistent ] ->
        get_params:('a, [ `WithoutSuffix ], 'an) Eliom_parameter.params_type ->
        unit ->
        (string list * 'a, unit, get, Eliom_service_sigs.S.att, non_co,
         non_ext, non_reg, [ `WithSuffix ],
         [ `One of string list ] Eliom_parameter.param_name * 'an, unit,
         non_ocaml)
        Eliom_service_sigs.S.t
      val preapply :
        service:('a, 'b, 'meth, Eliom_service_sigs.S.att, 'co, 'ext, 'reg,
                 [< `WithSuffix | `WithoutSuffix ], 'e, 'f, 'return)
                Eliom_service_sigs.S.t ->
        '->
        (unit, 'b, 'meth, Eliom_service_sigs.S.att, 'co, 'ext, non_reg,
         [ `WithoutSuffix ], unit, 'f, 'return)
        Eliom_service_sigs.S.t
      val add_non_localized_get_parameters :
        params:('p, [ `WithoutSuffix ], 'pn)
               Eliom_parameter.non_localized_params ->
        service:('a, 'b, 'meth, 'attach, 'co, 'ext, 'reg,
                 [< `WithSuffix | `WithoutSuffix ] as 'c, 'e, 'f, 'return)
                Eliom_service_sigs.S.t ->
        ('a * 'p, 'b, 'meth, 'attach, 'co, 'ext, 'reg, 'c, 'e * 'pn, 'f,
         'return)
        Eliom_service_sigs.S.t
      val add_non_localized_post_parameters :
        params:('p, [ `WithoutSuffix ], 'pn)
               Eliom_parameter.non_localized_params ->
        service:('a, 'b, 'meth, 'attach, 'co, 'ext, 'g,
                 [< `WithSuffix | `WithoutSuffix ] as 'c, 'e, 'f, 'return)
                Eliom_service_sigs.S.t ->
        ('a, 'b * 'p, 'meth, 'attach, 'co, 'ext, 'g, 'c, 'e, 'f * 'pn,
         'return)
        Eliom_service_sigs.S.t
      val extern :
        ?keep_nl_params:[ `All | `None | `Persistent ] ->
        prefix:string ->
        path:Eliom_lib.Url.path ->
        meth:('m, 'gp, 'gn, 'pp, 'pn,
              [< `WithSuffix | `WithoutSuffix ] as 'a, 'b)
             meth ->
        unit ->
        ('gp, 'pp, 'm, Eliom_service_sigs.S.att, non_co, ext, non_reg, 'a,
         'gn, 'pn, non_ocaml)
        Eliom_service_sigs.S.t
      val which_meth :
        ('a, 'b, 'm, 'c, 'd, 'e, 'f, [< `WithSuffix | `WithoutSuffix ], 'g,
         'h, 'i)
        Eliom_service_sigs.S.t -> 'm which_meth
      val which_meth_untyped :
        ('a, 'b, 'c, 'd, 'e, 'f, 'g, [< `WithSuffix | `WithoutSuffix ], 'h,
         'i, 'j)
        Eliom_service_sigs.S.t -> [ `Delete | `Get | `Post | `Put ]
      val info :
        ('a, 'b, 'c, 'att, 'd, 'e, 'f, [< `WithSuffix | `WithoutSuffix ], 'g,
         'h, 'i)
        Eliom_service_sigs.S.t -> 'att Eliom_service_sigs.S.attached_info
      val is_external :
        ('a, 'b, 'c, 'd, 'e, 'f, 'g, [< `WithSuffix | `WithoutSuffix ], 'h,
         'i, 'j)
        Eliom_service_sigs.S.t -> bool
      val get_params_type :
        ('a, 'b, 'd, 'e, 'f, 'g, 'h, [< `WithSuffix | `WithoutSuffix ] as 'i,
         'c, 'j, 'k)
        Eliom_service_sigs.S.t -> ('a, 'i, 'c) Eliom_parameter.params_type
      val post_params_type :
        ('c, 'a, 'd, 'e, 'f, 'g, 'h, [< `WithSuffix | `WithoutSuffix ], 'i,
         'b, 'j)
        Eliom_service_sigs.S.t ->
        ('a, [ `WithoutSuffix ], 'b) Eliom_parameter.params_type
      val sub_path : Eliom_service_sigs.S.att -> Eliom_lib.Url.path
      val full_path : Eliom_service_sigs.S.att -> Eliom_lib.Url.path
      val prefix : Eliom_service_sigs.S.att -> string
      val get_name : Eliom_service_sigs.S.att -> Eliom_common.att_key_serv
      val post_name : Eliom_service_sigs.S.att -> Eliom_common.att_key_serv
      val redirect_suffix : Eliom_service_sigs.S.att -> bool
      val na_name : Eliom_service_sigs.S.non_att -> Eliom_common.na_key_serv
      val na_keep_get_na_params : Eliom_service_sigs.S.non_att -> bool
      val max_use :
        ('a, 'b, 'c, 'd, 'e, 'f, 'g, [< `WithSuffix | `WithoutSuffix ], 'h,
         'i, 'j)
        Eliom_service_sigs.S.t -> int option
      val timeout :
        ('a, 'b, 'c, 'd, 'e, 'f, 'g, [< `WithSuffix | `WithoutSuffix ], 'h,
         'i, 'j)
        Eliom_service_sigs.S.t -> float option
      val https :
        ('a, 'b, 'c, 'd, 'e, 'f, 'g, [< `WithSuffix | `WithoutSuffix ], 'h,
         'i, 'j)
        Eliom_service_sigs.S.t -> bool
      val priority : Eliom_service_sigs.S.att -> int
      val client_fun :
        ('a, 'b, 'c, 'd, 'e, 'f, 'g, [< `WithSuffix | `WithoutSuffix ], 'h,
         'i, 'j)
        Eliom_service_sigs.S.t ->
        ('-> '-> Eliom_service_sigs.S.result Lwt.t) Eliom_client_value.t
        option
      val has_client_fun :
        ('a, 'b, 'c, 'd, 'e, 'f, 'g, [< `WithSuffix | `WithoutSuffix ], 'h,
         'i, 'j)
        Eliom_service_sigs.S.t -> bool
      val keep_nl_params :
        ('a, 'b, 'c, 'd, 'e, 'f, 'g, [< `WithSuffix | `WithoutSuffix ], 'h,
         'i, 'j)
        Eliom_service_sigs.S.t -> [ `All | `None | `Persistent ]
      val change_get_num :
        ('a, 'b, 'meth, Eliom_service_sigs.S.att, 'co, 'ext, 'c,
         [< `WithSuffix | `WithoutSuffix ] as 'd, 'e, 'f, 'return)
        Eliom_service_sigs.S.t ->
        Eliom_service_sigs.S.att ->
        Eliom_common.att_key_serv ->
        ('a, 'b, 'meth, Eliom_service_sigs.S.att, 'co, 'ext, 'g, 'd, 'e, 'f,
         'return)
        Eliom_service_sigs.S.t
      val register_delayed_get_or_na_coservice :
        sp:Eliom_common.server_params ->
        int * [< Eliom_common.user_scope ] * bool option -> string
      val register_delayed_post_coservice :
        sp:Eliom_common.server_params ->
        int * [< Eliom_common.user_scope ] * bool option ->
        Eliom_common.att_key_serv -> string
      type send_appl_content =
          XNever
        | XAlways
        | XSame_appl of string * string option
      val send_appl_content :
        ('a, 'b, 'c, 'd, 'e, 'f, 'g, [< `WithSuffix | `WithoutSuffix ], 'h,
         'i, 'j)
        Eliom_service_sigs.S.t -> Eliom_service_sigs.S.send_appl_content
      val xhr_with_cookies :
        ('a, 'b, 'c, 'd, 'e, 'f, 'g, [< `WithSuffix | `WithoutSuffix ], 'h,
         'i, 'j)
        Eliom_service_sigs.S.t -> string option option
      val internal_set_client_fun :
        service:('a, 'b, 'c, 'd, 'e, 'f, 'g,
                 [< `WithSuffix | `WithoutSuffix ], 'h, 'i, 'j)
                Eliom_service_sigs.S.t ->
        ('-> '-> Eliom_service_sigs.S.result Lwt.t) Eliom_client_value.t ->
        unit
    end
end