Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
This module provides facilities for adding headers to a response.
>>>
let headerVal = addHeader "some-url" 5 :: Headers '[Header "Location" String] Int
The value is added to the header specified by the type (Location
in the
example above).
Synopsis
- data Headers ls a = Headers {
- getResponse :: a
- getHeadersHList :: HList ls
- data ResponseHeader (sym :: Symbol) a
- class AddHeader (mods :: [Type]) h v orig new | mods h v orig -> new, new -> mods, new -> h, new -> v, new -> orig
- addHeader :: AddHeader '[Optional, Strict] h v orig new => v -> orig -> new
- addHeader' :: AddHeader mods h v orig new => v -> orig -> new
- noHeader :: AddHeader '[Optional, Strict] h v orig new => orig -> new
- noHeader' :: AddHeader mods h v orig new => orig -> new
- class HasResponseHeader h a headers
- lookupResponseHeader :: HasResponseHeader h a headers => Headers headers r -> ResponseHeader h a
- class BuildHeadersTo hs where
- buildHeadersTo :: [Header] -> HList hs
- class GetHeaders ls where
- getHeaders :: ls -> [Header]
- class GetHeaders' hs
- type family HeaderValMap (f :: Type -> Type) (xs :: [Type]) where ...
- data HList a where
Documentation
Response Header objects. You should never need to construct one directly.
Instead, use addOptionalHeader
.
Headers | |
|
Instances
(KnownSymbol h, ToHttpApiData v) => AddHeader mods h v (Headers (fst ': rest) a) (Headers (Header' mods h v ': (fst ': rest)) a) Source # | |
Defined in Servant.API.ResponseHeaders addOptionalHeader :: ResponseHeader h v -> Headers (fst ': rest) a -> Headers (Header' mods h v ': (fst ': rest)) a | |
Functor (Headers ls) Source # | |
(NFDataHList ls, NFData a) => NFData (Headers ls a) Source # | |
Defined in Servant.API.ResponseHeaders | |
GetHeaders' hs => GetHeaders (Headers hs a) Source # | |
Defined in Servant.API.ResponseHeaders getHeaders :: Headers hs a -> [Header] Source # | |
HasStatus a => HasStatus (Headers ls a) Source # | |
type StatusOf (Headers ls a) Source # | |
Defined in Servant.API.UVerb |
data ResponseHeader (sym :: Symbol) a Source #
Instances
Functor (ResponseHeader sym) Source # | |
Defined in Servant.API.ResponseHeaders fmap :: (a -> b) -> ResponseHeader sym a -> ResponseHeader sym b # (<$) :: a -> ResponseHeader sym b -> ResponseHeader sym a # | |
Show a => Show (ResponseHeader sym a) Source # | |
Defined in Servant.API.ResponseHeaders showsPrec :: Int -> ResponseHeader sym a -> ShowS # show :: ResponseHeader sym a -> String # showList :: [ResponseHeader sym a] -> ShowS # | |
NFData a => NFData (ResponseHeader sym a) Source # | |
Defined in Servant.API.ResponseHeaders rnf :: ResponseHeader sym a -> () # | |
Eq a => Eq (ResponseHeader sym a) Source # | |
Defined in Servant.API.ResponseHeaders (==) :: ResponseHeader sym a -> ResponseHeader sym a -> Bool # (/=) :: ResponseHeader sym a -> ResponseHeader sym a -> Bool # |
class AddHeader (mods :: [Type]) h v orig new | mods h v orig -> new, new -> mods, new -> h, new -> v, new -> orig Source #
addOptionalHeader
Instances
(KnownSymbol h, ToHttpApiData v, new ~ Headers '[Header' mods h v] a) => AddHeader mods h v a new Source # | |
Defined in Servant.API.ResponseHeaders addOptionalHeader :: ResponseHeader h v -> a -> new | |
(AddHeader mods h v old new, AddHeader mods h v (Union oldrest) (Union newrest), oldrest ~ (a ': as), newrest ~ (b ': bs)) => AddHeader mods h v (Union (old ': (a ': as))) (Union (new ': (b ': bs))) Source # | |
Defined in Servant.API.ResponseHeaders addOptionalHeader :: ResponseHeader h v -> Union (old ': (a ': as)) -> Union (new ': (b ': bs)) | |
AddHeader mods h v old new => AddHeader mods h v (Union '[old]) (Union '[new]) Source # | |
Defined in Servant.API.ResponseHeaders addOptionalHeader :: ResponseHeader h v -> Union '[old] -> Union '[new] | |
(KnownSymbol h, ToHttpApiData v) => AddHeader mods h v (Headers (fst ': rest) a) (Headers (Header' mods h v ': (fst ': rest)) a) Source # | |
Defined in Servant.API.ResponseHeaders addOptionalHeader :: ResponseHeader h v -> Headers (fst ': rest) a -> Headers (Header' mods h v ': (fst ': rest)) a |
addHeader :: AddHeader '[Optional, Strict] h v orig new => v -> orig -> new Source #
addHeader
adds a header to a response. Note that it changes the type of
the value in the following ways:
- A simple value is wrapped in "Headers '[hdr]":
>>>
let example0 = addHeader 5 "hi" :: Headers '[Header "someheader" Int] String;
>>>
getHeaders example0
[("someheader","5")]
- A value that already has a header has its new header *prepended* to the existing list:
>>>
let example1 = addHeader 5 "hi" :: Headers '[Header "someheader" Int] String;
>>>
let example2 = addHeader True example1 :: Headers '[Header "1st" Bool, Header "someheader" Int] String
>>>
getHeaders example2
[("1st","true"),("someheader","5")]
Note that while in your handlers type annotations are not required, since the type can be inferred from the API type, in other cases you may find yourself needing to add annotations.
addHeader' :: AddHeader mods h v orig new => v -> orig -> new Source #
noHeader :: AddHeader '[Optional, Strict] h v orig new => orig -> new Source #
Deliberately do not add a header to a value.
>>>
let example1 = noHeader "hi" :: Headers '[Header "someheader" Int] String
>>>
getHeaders example1
[]
class HasResponseHeader h a headers Source #
hlistLookupHeader
Instances
HasResponseHeader h a (Header' mods h a ': rest) Source # | |
Defined in Servant.API.ResponseHeaders hlistLookupHeader :: HList (Header' mods h a ': rest) -> ResponseHeader h a | |
HasResponseHeader h a rest => HasResponseHeader h a (first ': rest) Source # | |
Defined in Servant.API.ResponseHeaders hlistLookupHeader :: HList (first ': rest) -> ResponseHeader h a |
lookupResponseHeader :: HasResponseHeader h a headers => Headers headers r -> ResponseHeader h a Source #
Look up a specific ResponseHeader, without having to know what position it is in the HList.
>>>
let example1 = addHeader 5 "hi" :: Headers '[Header "someheader" Int] String
>>>
let example2 = addHeader True example1 :: Headers '[Header "1st" Bool, Header "someheader" Int] String
>>>
lookupResponseHeader example2 :: ResponseHeader "someheader" Int
Header 5
>>>
lookupResponseHeader example2 :: ResponseHeader "1st" Bool
Header True
Usage of this function relies on an explicit type annotation of the header to be looked up. This can be done with type annotations on the result, or with an explicit type application. In this example, the type of header value is determined by the type-inference, we only specify the name of the header:
>>>
:set -XTypeApplications
>>>
case lookupResponseHeader @"1st" example2 of { Header b -> b ; _ -> False }
True
Since: 0.15
class BuildHeadersTo hs where Source #
buildHeadersTo :: [Header] -> HList hs Source #
Instances
BuildHeadersTo ('[] :: [Type]) Source # | |
Defined in Servant.API.ResponseHeaders buildHeadersTo :: [Header] -> HList '[] Source # | |
(FromHttpApiData v, BuildHeadersTo xs, KnownSymbol h) => BuildHeadersTo (Header' mods h v ': xs) Source # | |
Defined in Servant.API.ResponseHeaders |
class GetHeaders ls where Source #
getHeaders :: ls -> [Header] Source #
Instances
GetHeadersFromHList hs => GetHeaders (HList hs) Source # | |
Defined in Servant.API.ResponseHeaders getHeaders :: HList hs -> [Header] Source # | |
GetHeaders' hs => GetHeaders (Headers hs a) Source # | |
Defined in Servant.API.ResponseHeaders getHeaders :: Headers hs a -> [Header] Source # |
class GetHeaders' hs Source #
Auxiliary class for
instanceGetHeaders
(Headers
hs a)
getHeaders'
Instances
GetHeaders' ('[] :: [Type]) Source # | This instance is an optimisation |
Defined in Servant.API.ResponseHeaders getHeaders' :: Headers '[] a -> [Header] | |
(KnownSymbol h, GetHeadersFromHList rest, ToHttpApiData v) => GetHeaders' (Header' mods h v ': rest) Source # | |
Defined in Servant.API.ResponseHeaders getHeaders' :: Headers (Header' mods h v ': rest) a -> [Header] |
type family HeaderValMap (f :: Type -> Type) (xs :: [Type]) where ... Source #
HeaderValMap f '[] = '[] | |
HeaderValMap f (Header' mods h x ': xs) = Header' mods h (f x) ': HeaderValMap f xs |
Instances
NFDataHList xs => NFData (HList xs) Source # | |
Defined in Servant.API.ResponseHeaders | |
GetHeadersFromHList hs => GetHeaders (HList hs) Source # | |
Defined in Servant.API.ResponseHeaders getHeaders :: HList hs -> [Header] Source # |