HORIZON HASKELLDocslts/ghc-9.14.x3e2d5682026-10-11Search names, modules, packages, or :: a typeCtrl K

GHC 9.14.1 · lts/ghc-9.14.x · 3e2d568 · 2026-10-11

Modulesnap-core-1.0.5.1Haskell2010

Snap.Types.Headers

An opaque data type for HTTP headers. Intended to be imported qualified, i.e:

import           Snap.Types.Headers (Headers)
import qualified Snap.Types.Headers as H

foo :: Headers
foo = H.empty
  • 1 type
  • 17 values
  • Packagesnap-core-1.0.5.1
  • Exports18
  • LanguageHaskell2010
  • LicenceBSD-3-Clause
  • SourceHeaders.hs

Headers type

1 declaration
newtypenewtype Headers
#

A key-value map that represents a collection of HTTP header fields. Keys are case-insensitive.

Instances2Show, HasHeaders

Headers creation

1 declaration
valueempty :: Headers
#

An empty collection of HTTP header fields.

Example:

ghci> H.empty
H {unH = []}

Predicates

2 declarations
valuenull :: Headers -> Bool
#

Is a given collection of HTTP header fields empty?

Example:

ghci> :set -XOverloadedStrings
ghci> H.null H.empty
True
ghci> H.null $ H.fromList [("Host", "localhost")]
False

Lookup

2 declarations

Adding/setting headers

3 declarations

Insert a key-value pair into the headers map. If the key already exists in the map, the values are catenated with ", ".

Example:

ghci> :set -XOverloadedStrings
ghci> let hdrs = H.insert "Accept" "text/plain" $ H.empty
ghci> hdrs
H {unH = [("accept","text/plain")]}
ghci> H.insert "Accept" "text/html" $ hdrs
H {unH = [("accept","text/plain,text/html")]}

Insert a key-value pair into the headers map, without checking whether the header already exists. The key must be already case-folded, or none of the lookups will work!

Example:

ghci> :set -XOverloadedStrings
ghci> let hdrs = H.unsafeInsert "accept" "text/plain" $ H.empty
ghci> hdrs
H {unH = [("accept","text/plain")]}
ghci> let hdrs' = H.unsafeInsert "accept" "text/html" $ hdrs
ghci> hdrs'
H {unH = [("accept","text/html"), ("accept","text/plain")]}
ghci> H.lookup "accept" hdrs'
Just "text/html"
valueset :: CI ByteString -> ByteString -> Headers -> Headers
#

Set the value of a HTTP header field to a given value, replacing the old value.

Example:

ghci> :set -XOverloadedStrings
ghci> H.set "accept" "text/plain" $ H.empty
H {unH = [("accept","text/plain")]}
ghci> H.set "accept" "text/html" $ H.fromList [("Accept", "text/plain")]
H {unH = [("accept","text/html")]}

Deleting

1 declaration
valuedelete :: CI ByteString -> Headers -> Headers
#

Delete all key-value pairs associated with the given key from the headers map.

Example:

ghci> :set -XOverloadedStrings
ghci> H.delete "accept" $ H.fromList [("Accept", "text/plain")]
H {unH = []}

Traversal

4 declarations
valuefoldl' :: (a -> CI ByteString -> ByteString -> a) -> a -> Headers -> a
#

Strict left fold over all key-value pairs in the headers map.

Example:

ghci> :set -XOverloadedStrings
ghci> import Data.Monoid
ghci> let hdrs = H.fromList [("Accept", "text/plain"), ("Accept", "text/html")]
ghci> let f (cntr, acc) _ val = (cntr+1, val <> ";" <> acc)
ghci> H.foldl' f (0, "") hdrs
(2,"text/html;text/plain;")
valuefoldr :: (CI ByteString -> ByteString -> a -> a) -> a -> Headers -> a
#

Right fold over all key-value pairs in the headers map.

Example:

ghci> :set -XOverloadedStrings
ghci> import Data.Monoid
ghci> let hdrs = H.fromList [("Accept", "text/plain"), ("Accept", "text/html")]
ghci> let f _ val (cntr, acc) = (cntr+1, val <> ";" <> acc)
ghci> H.foldr f (0, "") hdrs
(2,"text/plain;text/html;")

Lists

4 declarations
valuetoList :: Headers -> [(CI ByteString, ByteString)]
#

Convert a Headers value to a list of key-value pairs.

Example:

ghci> :set -XOverloadedStrings
ghci> let l = [("Accept", "text/plain"), ("Accept", "text/html")]
ghci> H.toList . H.fromList $ l
[("accept","text/plain"),("accept","text/html")]

Build a Headers value from a list of key-value pairs.

Example:

ghci> :set -XOverloadedStrings
ghci> H.fromList [("Accept", "text/plain"), ("Accept", "text/html")]
H {unH = [("accept","text/plain"),("accept","text/html")]}