HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

Modulehackage-security-0.6.3.2Haskell2010

Hackage.Security.Client.Repository.HttpLib

Abstracting over HTTP libraries

  • 6 types
  • 1 value
datadata HttpLib
#

Abstraction over HTTP clients

This avoids insisting on a particular implementation (such as the HTTP package) and allows for other implementations (such as a conduit based one).

NOTE: Library-specific exceptions MUST be wrapped in SomeRemoteError.

Constructors

  • HttpLib
    • httpGet :: forall a. Throws SomeRemoteError => [HttpRequestHeader] -> URI -> ([HttpResponseHeader] -> BodyReader -> IO a) -> IO a

      Download a file

    • httpGetRange :: forall a. Throws SomeRemoteError => [HttpRequestHeader] -> URI -> (Int, Int) -> (HttpStatus -> [HttpResponseHeader] -> BodyReader -> IO a) -> IO a

      Download a byte range

      Range is starting and (exclusive) end offset in bytes.

      HTTP servers are normally expected to respond to a range request with a "206 Partial Content" response. However, servers can respond with a "200 OK" response, sending the entire file instead (for instance, this may happen for servers that don't actually support range requests, but for which we optimistically assumed they did). Implementations of HttpLib may accept such a response and inform the hackage-security library that the whole file is being returned; the security library can then decide to execute the BodyReader anyway (downloading the entire file) or abort the request and try something else. For this reason the security library must be informed whether the server returned the full file or the requested range.

datadata HttpRequestHeader
#

Additional request headers

Since different libraries represent headers differently, here we just abstract over the few request headers that we might want to set

Constructors

Instances3Eq, Ord, Show
  • Eq HttpRequestHeaderDefined in hackage-security-0.6.3.2 · Hackage.Security.Client.Repository.HttpLib
  • Ord HttpRequestHeaderDefined in hackage-security-0.6.3.2 · Hackage.Security.Client.Repository.HttpLib
  • Show HttpRequestHeaderDefined in hackage-security-0.6.3.2 · Hackage.Security.Client.Repository.HttpLib
datadata HttpResponseHeader
#

Response headers

Since different libraries represent headers differently, here we just abstract over the few response headers that we might want to know about.

Constructors

Instances3Eq, Ord, Show
datadata ProxyConfig a
#

Proxy configuration

Although actually setting the proxy is the purview of the initialization function for individual HttpLib implementations and therefore outside the scope of this module, we offer this ProxyConfiguration type here as a way to uniformly configure proxies across all HttpLibs.

Constructors

  • ProxyConfigNone

    Don't use a proxy

  • ProxyConfigUse a

    Use this specific proxy

    Individual HTTP backends use their own types for specifying proxies.

  • ProxyConfigAuto

    Use automatic proxy settings

    What precisely automatic means is HttpLib specific, though typically it will involve looking at the HTTP_PROXY environment variable or the (Windows) registry.

Body reader

2 declarations
typetype BodyReader = IO ByteString
#

An IO action that represents an incoming response body coming from the server.

The action gets a single chunk of data from the response body, or an empty bytestring if no more data is available.

This definition is copied from the http-client package.

Construct a Body reader from a lazy bytestring

This is appropriate if the lazy bytestring is constructed, say, by calling hGetContents on a network socket, and the chunks of the bytestring correspond to the chunks as they are returned from the OS network layer.

If the lazy bytestring needs to be re-chunked this function is NOT suitable.