HTTP-4000.3.3: A library for client-side HTTP

CopyrightSee LICENSE file
LicenseBSD
MaintainerGanesh Sittampalam <ganesh@earth.li>
Stabilityexperimental
Portabilitynon-portable (not tested)
Safe HaskellSafe
LanguageHaskell98

Network.HTTP.Headers

Description

This module provides the data types for representing HTTP headers, and operations for looking up header values and working with sequences of header values in Requests and Responses. To avoid having to provide separate set of operations for doing so, we introduce a type class HasHeaders to facilitate writing such processing using overloading instead.

Synopsis

Documentation

class HasHeaders x where Source

HasHeaders is a type class for types containing HTTP headers, allowing you to write overloaded header manipulation functions for both Request and Response data types, for instance.

Methods

getHeaders :: x -> [Header] Source

setHeaders :: x -> [Header] -> x Source

data Header Source

The Header data type pairs header names & values.

Constructors

Header HeaderName String 

Instances

mkHeader :: HeaderName -> String -> Header Source

Header constructor as a function, hiding above rep.

data HeaderName Source

HTTP HeaderName type, a Haskell data constructor for each specification-defined header, prefixed with Hdr and CamelCased, (i.e., eliding the - in the process.) Should you require using a custom header, there's the HdrCustom constructor which takes a String argument.

Encoding HTTP header names differently, as Strings perhaps, is an equally fine choice..no decidedly clear winner, but let's stick with data constructors here.

insertHeader :: HasHeaders a => HeaderSetter a Source

insertHeader hdr val x inserts a header with the given header name and value. Does not check for existing headers with same name, allowing duplicates to be introduce (use replaceHeader if you want to avoid this.)

insertHeaderIfMissing :: HasHeaders a => HeaderSetter a Source

insertHeaderIfMissing hdr val x adds the new header only if no previous header with name hdr exists in x.

insertHeaders :: HasHeaders a => [Header] -> a -> a Source

insertHeaders hdrs x appends multiple headers to x's existing set.

retrieveHeaders :: HasHeaders a => HeaderName -> a -> [Header] Source

retrieveHeaders hdrNm x gets a list of headers with HeaderName hdrNm.

replaceHeader :: HasHeaders a => HeaderSetter a Source

replaceHeader hdr val o replaces the header hdr with the value val, dropping any existing

findHeader :: HasHeaders a => HeaderName -> a -> Maybe String Source

findHeader hdrNm x looks up hdrNm in x, returning the first header that matches, if any.

lookupHeader :: HeaderName -> [Header] -> Maybe String Source

lookupHeader hdr hdrs locates the first header matching hdr in the list hdrs.

parseHeader :: String -> Result Header Source

parseHeader headerNameAndValueString tries to unscramble a header: value pairing and returning it as a Header.

parseHeaders :: [String] -> Result [Header] Source

parseHeaders hdrs takes a sequence of strings holding header information and parses them into a set of headers (preserving their order in the input argument.) Handles header values split up over multiple lines.

headerMap :: [(String, HeaderName)] Source

headerMap is a straight assoc list for translating between header names and values.

type HeaderSetter a = HeaderName -> String -> a -> a Source