## Headers

`class type headers = object ... end`
`val headers : headers Js.t Js.constr`
`val headers_of_list : (string * string) list -> headers Js.t`

Build a `headers` object from a list of `(name, value)` pairs.

## Request

`class type body = object ... end`

The body-reader methods are Promise-typed — see `Promise`.

`class type requestInit = object ... end`

Initializer for `request` (and `fetch_with_init`). All fields are optional; create an empty record with `empty_request_init` and populate the ones you need.

`val empty_request_init : unit -> requestInit Js.t`
`class type request = object ... end`
`val request : (Js.js_string Js.t -> request Js.t) Js.constr`
`val request_with_init : (Js.js_string Js.t -> requestInit Js.t -> request Js.t) Js.constr`
`val request_of_request : (request Js.t -> request Js.t) Js.constr`
`val request_of_request_with_init : (request Js.t -> requestInit Js.t -> request Js.t) Js.constr`

`new%js request_of_request_with_init r init` builds a request using `r` as a template, overriding fields set in `init`.

## Response

`class type responseInit = object ... end`
`val empty_response_init : unit -> responseInit Js.t`
`class type response = object ... end`
`val response : (Js.Unsafe.any -> response Js.t) Js.constr`
`val response_with_init : (Js.Unsafe.any -> responseInit Js.t -> response Js.t) Js.constr`

## fetch

`val fetch : Js.js_string Js.t -> response Js.t Promise.t`
`val fetch_with_init : Js.js_string Js.t -> requestInit Js.t -> response Js.t Promise.t`
`val fetch_request : request Js.t -> response Js.t Promise.t`
`val is_supported : unit -> bool`

Whether the `fetch` global is available in the current environment.