hackage-security- Hackage security library

Safe HaskellNone




Abstracting over HTTP libraries



data HttpLib Source #

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.




  • 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 rqeuests, 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.

data HttpStatus Source #

HTTP status code



200 OK


206 Partial Content

data ProxyConfig a Source #

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.



Don't use a proxy

ProxyConfigUse a

Use this specific proxy

Individual HTTP backends use their own types for specifying proxies.


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

type BodyReader = IO ByteString Source #

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.

bodyReaderFromBS :: ByteString -> IO BodyReader Source #

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.