sig
  module type LINKS_AND_FORMS =
    sig
      type +'a elt
      type +'a attrib
      type uri
      type (_, _, _) star
      type 'a form_param
      type ('a, 'b, 'c) lazy_star =
          ?a:'Eliom_content_sigs.LINKS_AND_FORMS.attrib list ->
          'Eliom_content_sigs.LINKS_AND_FORMS.elt list Eliom_lazy.request ->
          'Eliom_content_sigs.LINKS_AND_FORMS.elt
      val lazy_form :
        ([< Html_types.form_attrib ], [< Html_types.form_content_fun ],
         [> Html_types.form ])
        Eliom_content_sigs.LINKS_AND_FORMS.lazy_star
      val make_uri :
        ?absolute:bool ->
        ?absolute_path:bool ->
        ?https:bool ->
        service:('get, unit, Eliom_service.get, 'a, 'b, 'c, 'd,
                 [< `WithSuffix | `WithoutSuffix ], 'e, unit, 'f)
                Eliom_service.t ->
        ?hostname:string ->
        ?port:int ->
        ?fragment:string ->
        ?keep_nl_params:[ `All | `None | `Persistent ] ->
        ?nl_params:Eliom_parameter.nl_params_set -> 'get -> uri
      val uri_of_string : (unit -> string) -> uri
      val css_link :
        ?a:[< Html_types.link_attrib ] attrib list ->
        uri:uri -> unit -> [> Html_types.link ] elt
      val js_script :
        ?a:[< Html_types.script_attrib ] attrib list ->
        uri:uri -> unit -> [> Html_types.script ] elt
      val a :
        ?absolute:bool ->
        ?absolute_path:bool ->
        ?https:bool ->
        ?a:[< Html_types.a_attrib ] attrib list ->
        service:('get, unit, Eliom_service.get, 'b, 'c, 'd, 'e,
                 [< `WithSuffix | `WithoutSuffix ], 'f, unit,
                 Eliom_service.non_ocaml)
                Eliom_service.t ->
        ?hostname:string ->
        ?port:int ->
        ?fragment:string ->
        ?keep_nl_params:[ `All | `None | `Persistent ] ->
        ?nl_params:Eliom_parameter.nl_params_set ->
        ?xhr:bool -> 'a elt list -> 'get -> [> 'Html_types.a ] elt
      module Form :
        sig
          type 'a param = 'a form_param
          val float : float param
          val int : int param
          val int32 : int32 param
          val int64 : int64 param
          val nativeint : nativeint param
          val bool : bool param
          val string : string param
          val user : ('-> string) -> 'a param
          val make_post_uri_components :
            ?absolute:bool ->
            ?absolute_path:bool ->
            ?https:bool ->
            service:('get, 'post, Eliom_service.post, 'a, 'b, 'c, 'd,
                     [< `WithSuffix | `WithoutSuffix ], 'e, 'f, 'g)
                    Eliom_service.t ->
            ?hostname:string ->
            ?port:int ->
            ?fragment:string ->
            ?keep_nl_params:[ `All | `None | `Persistent ] ->
            ?nl_params:Eliom_parameter.nl_params_set ->
            ?keep_get_na_params:bool ->
            'get ->
            'post ->
            string * (string * Eliommod_parameters.param) list *
            string option * (string * Eliommod_parameters.param) list
          val get_form :
            ?absolute:bool ->
            ?absolute_path:bool ->
            ?https:bool ->
            ?a:[< Html_types.form_attrib ] attrib list ->
            service:('a, unit, Eliom_service.get, 'b, 'c, 'd, 'e,
                     [< `WithSuffix | `WithoutSuffix ], 'gn, 'f,
                     Eliom_service.non_ocaml)
                    Eliom_service.t ->
            ?hostname:string ->
            ?port:int ->
            ?fragment:string ->
            ?keep_nl_params:[ `All | `None | `Persistent ] ->
            ?nl_params:Eliom_parameter.nl_params_set ->
            ?xhr:bool ->
            ('gn -> [< Html_types.form_content ] elt list) ->
            [> Html_types.form ] elt
          val lwt_get_form :
            ?absolute:bool ->
            ?absolute_path:bool ->
            ?https:bool ->
            ?a:[< Html_types.form_attrib ] attrib list ->
            service:('a, unit, Eliom_service.get, 'b, 'c, 'd, 'e,
                     [< `WithSuffix | `WithoutSuffix ], 'gn, 'f,
                     Eliom_service.non_ocaml)
                    Eliom_service.t ->
            ?hostname:string ->
            ?port:int ->
            ?fragment:string ->
            ?keep_nl_params:[ `All | `None | `Persistent ] ->
            ?nl_params:Eliom_parameter.nl_params_set ->
            ?xhr:bool ->
            ('gn -> [< Html_types.form_content ] elt list Lwt.t) ->
            [> Html_types.form ] elt Lwt.t
          val post_form :
            ?absolute:bool ->
            ?absolute_path:bool ->
            ?https:bool ->
            ?a:[< Html_types.form_attrib ] attrib list ->
            service:('get, 'a, Eliom_service.post, 'b, 'c, 'd, 'e,
                     [< `WithSuffix | `WithoutSuffix ], 'f, 'pn,
                     Eliom_service.non_ocaml)
                    Eliom_service.t ->
            ?hostname:string ->
            ?port:int ->
            ?fragment:string ->
            ?keep_nl_params:[ `All | `None | `Persistent ] ->
            ?keep_get_na_params:bool ->
            ?nl_params:Eliom_parameter.nl_params_set ->
            ?xhr:bool ->
            ('pn -> [< Html_types.form_content ] elt list) ->
            'get -> [> Html_types.form ] elt
          val lwt_post_form :
            ?absolute:bool ->
            ?absolute_path:bool ->
            ?https:bool ->
            ?a:[< Html_types.form_attrib ] attrib list ->
            service:('get, 'a, Eliom_service.post, 'b, 'c, 'd, 'e,
                     [< `WithSuffix | `WithoutSuffix ], 'f, 'pn,
                     Eliom_service.non_ocaml)
                    Eliom_service.t ->
            ?hostname:string ->
            ?port:int ->
            ?fragment:string ->
            ?keep_nl_params:[ `All | `None | `Persistent ] ->
            ?keep_get_na_params:bool ->
            ?nl_params:Eliom_parameter.nl_params_set ->
            ?xhr:bool ->
            ('pn -> [< Html_types.form_content ] elt list Lwt.t) ->
            'get -> [> Html_types.form ] elt Lwt.t
          val input :
            ?a:[< Html_types.input_attrib ] attrib list ->
            input_type:[< Html_types.input_type ] ->
            ?name:[< 'Eliom_parameter.setoneradio ]
                  Eliom_parameter.param_name ->
            ?value:'-> 'a param -> [> Html_types.input ] elt
          val file_input :
            ?a:[< Html_types.input_attrib ] attrib list ->
            name:[< Eliom_lib.file_info Eliom_parameter.setoneradio ]
                 Eliom_parameter.param_name ->
            unit -> [> Html_types.input ] elt
          val image_input :
            ?a:[< Html_types.input_attrib ] attrib list ->
            name:[< Eliom_parameter.coordinates Eliom_parameter.oneradio ]
                 Eliom_parameter.param_name ->
            ?src:uri -> unit -> [> Html_types.input ] elt
          val checkbox :
            ?a:[< Html_types.input_attrib ] attrib list ->
            ?checked:bool ->
            name:[ `Set of 'a ] Eliom_parameter.param_name ->
            value:'-> 'a param -> [> Html_types.input ] elt
          val bool_checkbox_one :
            ?a:[< Html_types.input_attrib ] attrib list ->
            ?checked:bool ->
            name:[ `One of bool ] Eliom_parameter.param_name ->
            unit -> [> Html_types.input ] elt
          val radio :
            ?a:[< Html_types.input_attrib ] attrib list ->
            ?checked:bool ->
            name:[ `Radio of 'a ] Eliom_parameter.param_name ->
            value:'-> 'a param -> [> Html_types.input ] elt
          val string_radio_required :
            ?a:[< Html_types.input_attrib ] attrib list ->
            ?checked:bool ->
            name:[ `One of string ] Eliom_parameter.param_name ->
            value:string -> unit -> [> Html_types.input ] elt
          val button :
            ?a:[< Html_types.button_attrib ] attrib list ->
            button_type:[< Eliom_form_sigs.button_type ] ->
            name:[< 'Eliom_parameter.setone ] Eliom_parameter.param_name ->
            value:'->
            'a param ->
            Html_types.button_content elt list -> [> Html_types.button ] elt
          val button_no_value :
            ?a:[< Html_types.button_attrib ] attrib list ->
            button_type:[< Eliom_form_sigs.button_type ] ->
            Html_types.button_content elt list -> [> Html_types.button ] elt
          val textarea :
            ?a:[< Html_types.textarea_attrib ] attrib list ->
            name:[< string Eliom_parameter.setoneradio ]
                 Eliom_parameter.param_name ->
            ?value:string -> unit -> [> Html_types.textarea ] elt
          type 'a soption =
              Html_types.option_attrib attrib list * 'a *
              Html_types.pcdata elt option * bool
          type 'a select_opt =
              Optgroup of
                [ `Accesskey
                | `Aria
                | `Class
                | `Contenteditable
                | `Contextmenu
                | `Dir
                | `Disabled
                | `Draggable
                | `Hidden
                | `Id
                | `Lang
                | `OnAbort
                | `OnBlur
                | `OnCanPlay
                | `OnCanPlayThrough
                | `OnChange
                | `OnClick
                | `OnContextMenu
                | `OnDblClick
                | `OnDrag
                | `OnDragEnd
                | `OnDragEnter
                | `OnDragLeave
                | `OnDragOver
                | `OnDragStart
                | `OnDrop
                | `OnDurationChange
                | `OnEmptied
                | `OnEnded
                | `OnError
                | `OnFocus
                | `OnFormChange
                | `OnFormInput
                | `OnInput
                | `OnInvalid
                | `OnKeyDown
                | `OnKeyPress
                | `OnKeyUp
                | `OnLoad
                | `OnLoadStart
                | `OnLoadedData
                | `OnLoadedMetaData
                | `OnMouseDown
                | `OnMouseMove
                | `OnMouseOut
                | `OnMouseOver
                | `OnMouseUp
                | `OnMouseWheel
                | `OnPause
                | `OnPlay
                | `OnPlaying
                | `OnProgress
                | `OnRateChange
                | `OnReadyStateChange
                | `OnScroll
                | `OnSeeked
                | `OnSeeking
                | `OnSelect
                | `OnShow
                | `OnStalled
                | `OnSubmit
                | `OnSuspend
                | `OnTimeUpdate
                | `OnTouchCancel
                | `OnTouchEnd
                | `OnTouchMove
                | `OnTouchStart
                | `OnVolumeChange
                | `OnWaiting
                | `Role
                | `Spellcheck
                | `Style_Attr
                | `Tabindex
                | `Title
                | `Translate
                | `User_data
                | `XML_lang
                | `XMLns ] attrib list * string * 'a soption *
                'a soption list
            | Option of 'a soption
          val select :
            ?a:[< Html_types.select_attrib ] attrib list ->
            ?required:Html_types.pcdata elt ->
            name:[ `One of 'a ] Eliom_parameter.param_name ->
            'a param ->
            'a select_opt -> 'a select_opt list -> [> Html_types.select ] elt
          val multiple_select :
            ?a:[< Html_types.select_attrib ] attrib list ->
            ?required:Html_types.pcdata elt ->
            name:[ `Set of 'a ] Eliom_parameter.param_name ->
            'a param ->
            'a select_opt -> 'a select_opt list -> [> Html_types.select ] elt
        end
    end
end