sig
  type button_type = [ `Button | `Reset | `Submit ]
  module type LINKS =
    sig
      type +'a elt
      type +'a attrib
      type uri
      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 -> Eliom_form_sigs.LINKS.uri
      val uri_of_string : (unit -> string) -> Eliom_form_sigs.LINKS.uri
      val css_link :
        ?a:[< Html_types.link_attrib ] Eliom_form_sigs.LINKS.attrib list ->
        uri:Eliom_form_sigs.LINKS.uri ->
        unit -> [> Html_types.link ] Eliom_form_sigs.LINKS.elt
      val js_script :
        ?a:[< Html_types.script_attrib ] Eliom_form_sigs.LINKS.attrib list ->
        uri:Eliom_form_sigs.LINKS.uri ->
        unit -> [> Html_types.script ] Eliom_form_sigs.LINKS.elt
      val a :
        ?absolute:bool ->
        ?absolute_path:bool ->
        ?https:bool ->
        ?a:[< Html_types.a_attrib ] Eliom_form_sigs.LINKS.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 ->
        'Eliom_form_sigs.LINKS.elt list ->
        'get -> [> 'Html_types.a ] Eliom_form_sigs.LINKS.elt
    end
  module type S =
    sig
      type 'a param
      type +'a elt
      type +'a attrib
      type uri
      val float : float Eliom_form_sigs.S.param
      val int : int Eliom_form_sigs.S.param
      val int32 : int32 Eliom_form_sigs.S.param
      val int64 : int64 Eliom_form_sigs.S.param
      val nativeint : nativeint Eliom_form_sigs.S.param
      val bool : bool Eliom_form_sigs.S.param
      val string : string Eliom_form_sigs.S.param
      val user : ('-> string) -> 'Eliom_form_sigs.S.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 ] Eliom_form_sigs.S.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 ] Eliom_form_sigs.S.elt list) ->
        [> Html_types.form ] Eliom_form_sigs.S.elt
      val lwt_get_form :
        ?absolute:bool ->
        ?absolute_path:bool ->
        ?https:bool ->
        ?a:[< Html_types.form_attrib ] Eliom_form_sigs.S.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 ] Eliom_form_sigs.S.elt list Lwt.t) ->
        [> Html_types.form ] Eliom_form_sigs.S.elt Lwt.t
      val post_form :
        ?absolute:bool ->
        ?absolute_path:bool ->
        ?https:bool ->
        ?a:[< Html_types.form_attrib ] Eliom_form_sigs.S.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 ] Eliom_form_sigs.S.elt list) ->
        'get -> [> Html_types.form ] Eliom_form_sigs.S.elt
      val lwt_post_form :
        ?absolute:bool ->
        ?absolute_path:bool ->
        ?https:bool ->
        ?a:[< Html_types.form_attrib ] Eliom_form_sigs.S.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 ] Eliom_form_sigs.S.elt list Lwt.t) ->
        'get -> [> Html_types.form ] Eliom_form_sigs.S.elt Lwt.t
      val input :
        ?a:[< Html_types.input_attrib ] Eliom_form_sigs.S.attrib list ->
        input_type:[< Html_types.input_type ] ->
        ?name:[< 'Eliom_parameter.setoneradio ] Eliom_parameter.param_name ->
        ?value:'->
        'Eliom_form_sigs.S.param ->
        [> Html_types.input ] Eliom_form_sigs.S.elt
      val file_input :
        ?a:[< Html_types.input_attrib ] Eliom_form_sigs.S.attrib list ->
        name:[< Eliom_lib.file_info Eliom_parameter.setoneradio ]
             Eliom_parameter.param_name ->
        unit -> [> Html_types.input ] Eliom_form_sigs.S.elt
      val image_input :
        ?a:[< Html_types.input_attrib ] Eliom_form_sigs.S.attrib list ->
        name:[< Eliom_parameter.coordinates Eliom_parameter.oneradio ]
             Eliom_parameter.param_name ->
        ?src:Eliom_form_sigs.S.uri ->
        unit -> [> Html_types.input ] Eliom_form_sigs.S.elt
      val checkbox :
        ?a:[< Html_types.input_attrib ] Eliom_form_sigs.S.attrib list ->
        ?checked:bool ->
        name:[ `Set of 'a ] Eliom_parameter.param_name ->
        value:'->
        'Eliom_form_sigs.S.param ->
        [> Html_types.input ] Eliom_form_sigs.S.elt
      val bool_checkbox_one :
        ?a:[< Html_types.input_attrib ] Eliom_form_sigs.S.attrib list ->
        ?checked:bool ->
        name:[ `One of bool ] Eliom_parameter.param_name ->
        unit -> [> Html_types.input ] Eliom_form_sigs.S.elt
      val radio :
        ?a:[< Html_types.input_attrib ] Eliom_form_sigs.S.attrib list ->
        ?checked:bool ->
        name:[ `Radio of 'a ] Eliom_parameter.param_name ->
        value:'->
        'Eliom_form_sigs.S.param ->
        [> Html_types.input ] Eliom_form_sigs.S.elt
      val string_radio_required :
        ?a:[< Html_types.input_attrib ] Eliom_form_sigs.S.attrib list ->
        ?checked:bool ->
        name:[ `One of string ] Eliom_parameter.param_name ->
        value:string -> unit -> [> Html_types.input ] Eliom_form_sigs.S.elt
      val button :
        ?a:[< Html_types.button_attrib ] Eliom_form_sigs.S.attrib list ->
        button_type:[< Eliom_form_sigs.button_type ] ->
        name:[< 'Eliom_parameter.setone ] Eliom_parameter.param_name ->
        value:'->
        'Eliom_form_sigs.S.param ->
        Html_types.button_content Eliom_form_sigs.S.elt list ->
        [> Html_types.button ] Eliom_form_sigs.S.elt
      val button_no_value :
        ?a:[< Html_types.button_attrib ] Eliom_form_sigs.S.attrib list ->
        button_type:[< Eliom_form_sigs.button_type ] ->
        Html_types.button_content Eliom_form_sigs.S.elt list ->
        [> Html_types.button ] Eliom_form_sigs.S.elt
      val textarea :
        ?a:[< Html_types.textarea_attrib ] Eliom_form_sigs.S.attrib list ->
        name:[< string Eliom_parameter.setoneradio ]
             Eliom_parameter.param_name ->
        ?value:string ->
        unit -> [> Html_types.textarea ] Eliom_form_sigs.S.elt
      type 'a soption =
          Html_types.option_attrib Eliom_form_sigs.S.attrib list * 'a *
          Html_types.pcdata Eliom_form_sigs.S.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 ] Eliom_form_sigs.S.attrib list * string *
            'Eliom_form_sigs.S.soption * 'Eliom_form_sigs.S.soption list
        | Option of 'Eliom_form_sigs.S.soption
      val select :
        ?a:[< Html_types.select_attrib ] Eliom_form_sigs.S.attrib list ->
        ?required:Html_types.pcdata Eliom_form_sigs.S.elt ->
        name:[ `One of 'a ] Eliom_parameter.param_name ->
        'Eliom_form_sigs.S.param ->
        'Eliom_form_sigs.S.select_opt ->
        'Eliom_form_sigs.S.select_opt list ->
        [> Html_types.select ] Eliom_form_sigs.S.elt
      val multiple_select :
        ?a:[< Html_types.select_attrib ] Eliom_form_sigs.S.attrib list ->
        ?required:Html_types.pcdata Eliom_form_sigs.S.elt ->
        name:[ `Set of 'a ] Eliom_parameter.param_name ->
        'Eliom_form_sigs.S.param ->
        'Eliom_form_sigs.S.select_opt ->
        'Eliom_form_sigs.S.select_opt list ->
        [> Html_types.select ] Eliom_form_sigs.S.elt
    end
end