Generate the necessary data for codegen as a list, each Req describing one endpoint from your API type.
Moduleservant-foreign-0.16.1Haskell2010
Servant.Foreign
Generalizes all the data needed to make code generation work with arbitrary programming languages.
See documentation of HasForeignType for a simple example. listFromAPI returns a list of all your endpoints and their foreign types, given a mapping from Haskell types to foreign types (conventionally called ftypes below).
- 104 types
- 22 classes
- 37 values
- Packageservant-foreign-0.16.1
- Exports173
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceForeign.hs
Main API
7 declarationsFull description of an endpoint in your API, generated by listFromAPI. It should give you all the information needed to generate foreign language bindings.
Every field containing ftype will use the foreign type mapping specified via HasForeignType (see its docstring on how to set that up).
See https://docs.servant.dev/en/stable/tutorial/ApiType.html for accessible documentation of the possible content of an endpoint.
Constructors
Req_reqUrl :: Url ftypeFull list of URL segments, including captures
_reqMethod :: Method"GET"/"POST"/"PUT"/…_reqHeaders :: [HeaderArg ftype]Headers required by this endpoint, with their type
_reqBody :: Maybe ftypeForeign type of the expected request body (ReqBody), if any
_reqReturnType :: Maybe ftypeThe foreign type of the response, if any
_reqFuncName :: FunctionNameThe URL segments rendered in a way that they can be easily concatenated into a canonical function name
_reqBodyContentType :: ReqBodyContentTypeThe content type the request body is transferred as.
This is a severe limitation of
servant-foreigncurrently, as we only allow the content type to be JSON no user-defined content types. (ReqBodyMultipart is not actually implemented.)Thus, any routes looking like this will work:
"foo" :> Get '[JSON] Foowhile routes like
"foo" :> Get '[MyFancyContentType] Foowill fail with an error like
• JSON expected in list '[MyFancyContentType]
Instances4GenerateList, Eq, Data, Show
GenerateList ftype (Req ftype)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalEq ftype => Eq (Req ftype)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalData ftype => Data (Req ftype)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalShow ftype => Show (Req ftype)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal
HasForeignType maps Haskell types with types in the target language of your backend. For example, let's say you're implementing a backend to some language X, and you want a Text representation of each input/output type mentioned in the API:
-- First you need to create a dummy type to parametrize your
-- instances.
data LangX
-- Otherwise you define instances for the types you need
instance HasForeignType LangX Text Int where
typeFor _ _ _ = "intX"
-- Or for example in case of lists
instance HasForeignType LangX Text a => HasForeignType LangX Text [a] where
typeFor lang ftype _ = "listX of " <> typeFor lang ftype (Proxy :: Proxy a)Finally to generate list of information about all the endpoints for an API you create a function of a form:
getEndpoints :: (HasForeign LangX Text api, GenerateList Text (Foreign Text api))
=> Proxy api -> [Req Text]
getEndpoints api = listFromAPI (Proxy :: Proxy LangX) (Proxy :: Proxy Text) api-- If language __X__ is dynamically typed then you can use
-- a predefined NoTypes parameter with the NoContent output type:getEndpoints :: (HasForeign NoTypes NoContent api, GenerateList Text (Foreign NoContent api))
=> Proxy api -> [Req NoContent]
getEndpoints api = listFromAPI (Proxy :: Proxy NoTypes) (Proxy :: Proxy NoContent) api
Instances1HasForeignType
HasForeignType NoTypes NoContent aDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalUse if the foreign language does not have any types.
Utility class used by listFromAPI which computes the data needed to generate a function for each endpoint and hands it all back in a list.
Methods
generateList :: reqs -> [Req ftype]
Instances3GenerateList
GenerateList ftype EmptyForeignAPIDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalGenerateList ftype (Req ftype)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(GenerateList ftype start, GenerateList ftype rest) => GenerateList ftype (start :<|> rest)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Implementation of the Servant framework types.
Relevant instances: Everything containing HasForeignType.
Associated types
type family Foreign ftype api
Instances25HasForeign, …
HasForeign lang ftype EmptyAPIDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype RawDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype (ToServantApi r) => HasForeign lang ftype (NamedRoutes r)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(HasForeign lang ftype a, HasForeign lang ftype b) => HasForeign lang ftype (a :<|> b)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(HasForeignType lang ftype NoContent, ReflectMethod method) => HasForeign lang ftype (NoContentVerb method)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (HttpVersion :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (Description desc :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (Summary desc :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (IsSecure :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (RemoteHost :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (StreamBody' mods framing ctype a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (WithResource res :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (Vault :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol path, HasForeign lang ftype api) => HasForeign lang ftype (path :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol sym, HasForeignType lang ftype Bool, HasForeign lang ftype api) => HasForeign lang ftype (QueryFlag sym :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol sym, HasForeignType lang ftype (RequiredArgument mods a), HasForeign lang ftype api) => HasForeign lang ftype (Header' mods sym a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol sym, HasForeignType lang ftype (RequiredArgument mods a), HasForeign lang ftype api) => HasForeign lang ftype (QueryParam' mods sym a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol sym, HasForeignType lang ftype [a], HasForeign lang ftype api) => HasForeign lang ftype (QueryParams sym a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol sym, HasForeignType lang ftype [t], HasForeign lang ftype sublayout) => HasForeign lang ftype (CaptureAll sym t :> sublayout)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol sym, HasForeignType lang ftype t, HasForeign lang ftype api) => HasForeign lang ftype (Capture' mods sym t :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(Elem JSON list, HasForeignType lang ftype a, HasForeign lang ftype api) => HasForeign lang ftype (ReqBody' mods list a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(HasForeignType lang ftype (Maybe a), HasForeign lang ftype api) => HasForeign lang ftype (Fragment a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (WithNamedContext name context api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(Elem JSON list, HasForeignType lang ftype a, ReflectMethod method) => HasForeign lang ftype (Verb method status list a)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(ct ~ JSON, HasForeignType lang ftype a, ReflectMethod method) => HasForeign lang ftype (Stream method status framing ct a)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalTODO: doesn't taking framing into account.
The language definition without any foreign types. It can be used for dynamic languages which do not do type annotations.
Instances1HasForeignType
HasForeignType NoTypes NoContent aDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalUse if the foreign language does not have any types.
Subtypes of Req
13 declarationsFull endpoint url, with all captures and parameters
A part of the Url’s path.
Constructors
SegmentunSegment :: SegmentType ftype
Instances3Eq, Data, Show
Constructors
Static PathSegmentStatic path segment.
"foo/bar/baz"contains the static segments
"foo","bar"and"baz".Cap (Arg ftype)A capture.
"user/{userid}/name"would capture the arg
useridwith typeftype.
Instances3Eq, Data, Show
Eq ftype => Eq (SegmentType ftype)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalData ftype => Data (SegmentType ftype)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalShow ftype => Show (SegmentType ftype)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Whether a segment is a Cap.
Crashing Arg extraction from segment, TODO: remove
Url Query argument.
Urls can contain query arguments, which is a list of key-value pairs. In a typical url, query arguments look like this:
?foo=bar&alist[]=el1&alist[]=el2&aflagEach pair can be
?foo=bar: a plain key-val pair, either optional or required (QueryParam)?aflag: a flag (no value, implicitly Bool with defaultfalseif it’s missing) (QueryFlag)?alist[]=el1&alist[]=el2: list of values (QueryParams)
_queryArgType will be set accordingly.
For the plain key-val pairs (QueryParam), _queryArgName’s ftype will be wrapped in a Maybe if the argument is optional.
Constructors
QueryArg_queryArgName :: Arg ftypeName and foreign type of the argument. Will be wrapped in Maybe if the query is optional and in a `[]` if the query is a list
_queryArgType :: ArgTypeone of normal/plain, list or flag
Instances3Eq, Data, Show
Constructors
HeaderArgThe name of the header and the foreign type of its value.
_headerArg :: Arg ftype
ReplaceHeaderArgUnused, will never be set.
TODO: remove
_headerArg :: Arg ftype_headerPattern :: Text
Instances3Eq, Data, Show
Maps a name to the foreign type that belongs to the annotated value.
Used for header args, query args, and capture args.
Constructors
Arg_argName :: PathSegmentThe name to be captured.
Only for capture args it really denotes a path segment.
_argType :: ftypeForeign type the associated value will have
Canonical name of the endpoint, can be used to generate a function name.
You can use the functions in Servant.Foreign.Inflections, like camelCase to transform to Text.
Constructors
Instances5Eq, Data, Show, Semigroup, Monoid
Eq FunctionNameDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalData FunctionNameDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalShow FunctionNameDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalSemigroup FunctionNameDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalMonoid FunctionNameDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
See documentation of _reqBodyContentType
Instances4Eq, Data, Read, Show
Eq ReqBodyContentTypeDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalData ReqBodyContentTypeDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalRead ReqBodyContentTypeDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalShow ReqBodyContentTypeDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
See documentation of Arg
Constructors
Instances6Eq, Data, Show, IsString, Semigroup, Monoid
Eq PathSegmentDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalData PathSegmentDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalShow PathSegmentDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalIsString PathSegmentDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalSemigroup PathSegmentDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalMonoid PathSegmentDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Lenses
15 declarationsPrisms
8 declarationsRe-exports
130 declarationsA type for responses without content-body.
Instances11Eq, Read, Show, Generic, NFData, HasStatus, …
Eq NoContentDefined in servant-0.20.2 · Servant.API.ContentTypesRead NoContentDefined in servant-0.20.2 · Servant.API.ContentTypesShow NoContentDefined in servant-0.20.2 · Servant.API.ContentTypesGeneric NoContentDefined in servant-0.20.2 · Servant.API.ContentTypesNFData NoContentDefined in servant-0.20.2 · Servant.API.ContentTypesHasStatus NoContentDefined in servant-0.20.2 · Servant.API.UVerbIf an API can respond with NoContent we assume that this will happen with the status code 204 No Content. If this needs to be overridden, WithStatus can be used.
HasForeignType NoTypes NoContent aDefined in servant-foreign-0.16.1 · Servant.Foreign.InternalUse if the foreign language does not have any types.
Accept ctyp => AllMimeRender '[ctyp] NoContentDefined in servant-0.20.2 · Servant.API.ContentTypesAllMime (ctyp ': ctyp' ': ctyps) => AllMimeRender (ctyp ': ctyp' ': ctyps) NoContentDefined in servant-0.20.2 · Servant.API.ContentTypestype Rep NoContent = D1 ('MetaDataDefined in servant-0.20.2 · Servant.API.ContentTypes"NoContent"
"Servant.API.ContentTypes"
"servant-0.20.2-kmMZib8zXn7e8NZPkSX15"
'False) (C1 ('MetaCons"NoContent"
'PrefixI 'False) U1)type StatusOf NoContent =Defined in servant-0.20.2 · Servant.API.UVerb204
Union of two APIs, first takes precedence in case of overlap.
Example:
:{type MyApi = "books" :> Get '[JSON] [Book] -- GET /books :<|> "books" :> ReqBody '[JSON] Book :> Post '[JSON] () -- POST /books:}
Constructors
a :<|> binfixr 3
Instances17Bifoldable, Bifunctor, Bitraversable, Biapplicative, HasForeign, HasLink, …
Bifoldable (:<|>)Defined in servant-0.20.2 · Servant.API.AlternativeBifunctor (:<|>)Defined in servant-0.20.2 · Servant.API.AlternativeBitraversable (:<|>)Defined in servant-0.20.2 · Servant.API.AlternativeBiapplicative (:<|>)Defined in servant-0.20.2 · Servant.API.Alternative(HasForeign lang ftype a, HasForeign lang ftype b) => HasForeign lang ftype (a :<|> b)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(HasLink a, HasLink b) => HasLink (a :<|> b)Defined in servant-0.20.2 · Servant.Links(GenerateList ftype start, GenerateList ftype rest) => GenerateList ftype (start :<|> rest)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalFunctor ((:<|>) a)Defined in servant-0.20.2 · Servant.API.AlternativeFoldable ((:<|>) a)Defined in servant-0.20.2 · Servant.API.AlternativeTraversable ((:<|>) a)Defined in servant-0.20.2 · Servant.API.Alternative(Bounded a, Bounded b) => Bounded (a :<|> b)Defined in servant-0.20.2 · Servant.API.Alternative(Eq a, Eq b) => Eq (a :<|> b)Defined in servant-0.20.2 · Servant.API.Alternative(Show a, Show b) => Show (a :<|> b)Defined in servant-0.20.2 · Servant.API.Alternative(Semigroup a, Semigroup b) => Semigroup (a :<|> b)Defined in servant-0.20.2 · Servant.API.Alternative(Monoid a, Monoid b) => Monoid (a :<|> b)Defined in servant-0.20.2 · Servant.API.Alternativetype MkLink (a :<|> b) r = MkLink a r :<|> MkLink b rDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (a :<|> b) = Foreign ftype a :<|> Foreign ftype bDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
An empty API: one which serves nothing. Morally speaking, this should be
the unit of :<|>. Implementors of interpretations of API types should
treat EmptyAPI as close to the unit as possible.
Instances8Bounded, Enum, Eq, Show, HasLink, HasForeign, …
Bounded EmptyAPIDefined in servant-0.20.2 · Servant.API.EmptyEnum EmptyAPIDefined in servant-0.20.2 · Servant.API.EmptyEq EmptyAPIDefined in servant-0.20.2 · Servant.API.EmptyShow EmptyAPIDefined in servant-0.20.2 · Servant.API.EmptyHasLink EmptyAPIDefined in servant-0.20.2 · Servant.LinksHasForeign lang ftype EmptyAPIDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype MkLink EmptyAPI a = EmptyAPIDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype EmptyAPI = EmptyForeignAPIDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Capture which can be modified. For example with Description.
Instances4HasForeign, HasLink, MkLink, Foreign
(KnownSymbol sym, HasForeignType lang ftype t, HasForeign lang ftype api) => HasForeign lang ftype (Capture' mods sym t :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(ToHttpApiData v, HasLink sub) => HasLink (Capture' mods sym v :> sub)Defined in servant-0.20.2 · Servant.Linkstype MkLink (Capture' mods sym v :> sub) a = v -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (Capture' mods sym t :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
The contained API (second argument) can be found under ("/" ++ path)
(path being the first argument).
Example:
-- GET /hello/world-- returning a JSON encoded World valuetype MyApi = "hello" :> "world" :> Get '[JSON] World
Instances75HasForeign, HasLink, MkLink, Foreign, …
HasForeign lang ftype api => HasForeign lang ftype (HttpVersion :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (Description desc :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (Summary desc :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (IsSecure :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (RemoteHost :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (StreamBody' mods framing ctype a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (WithResource res :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasForeign lang ftype api => HasForeign lang ftype (Vault :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol path, HasForeign lang ftype api) => HasForeign lang ftype (path :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol sym, HasForeignType lang ftype Bool, HasForeign lang ftype api) => HasForeign lang ftype (QueryFlag sym :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol sym, HasForeignType lang ftype (RequiredArgument mods a), HasForeign lang ftype api) => HasForeign lang ftype (Header' mods sym a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol sym, HasForeignType lang ftype (RequiredArgument mods a), HasForeign lang ftype api) => HasForeign lang ftype (QueryParam' mods sym a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol sym, HasForeignType lang ftype [a], HasForeign lang ftype api) => HasForeign lang ftype (QueryParams sym a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol sym, HasForeignType lang ftype [t], HasForeign lang ftype sublayout) => HasForeign lang ftype (CaptureAll sym t :> sublayout)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol sym, HasForeignType lang ftype t, HasForeign lang ftype api) => HasForeign lang ftype (Capture' mods sym t :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(Elem JSON list, HasForeignType lang ftype a, HasForeign lang ftype api) => HasForeign lang ftype (ReqBody' mods list a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(HasForeignType lang ftype (Maybe a), HasForeign lang ftype api) => HasForeign lang ftype (Fragment a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalTypeError (NoInstanceForSub HasLink ty) => HasLink (ty :> sub)Defined in servant-0.20.2 · Servant.LinksTypeError (PartialApplication HasLink arr) => HasLink (arr :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (HttpVersion :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (BasicAuth realm a :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (Description s :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (Summary s :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (AuthProtect tag :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (Header' mods sym a :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (IsSecure :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (RemoteHost :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (ReqBody' mods ct a :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (StreamBody' mods framing ct a :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (WithResource res :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (Vault :> sub)Defined in servant-0.20.2 · Servant.Links(KnownSymbol sym, ToHttpApiData v, HasLink sub) => HasLink (QueryParams sym v :> sub)Defined in servant-0.20.2 · Servant.Links(KnownSymbol sym, ToHttpApiData v, HasLink sub, SBoolI (FoldRequired mods)) => HasLink (QueryParam' mods sym v :> sub)Defined in servant-0.20.2 · Servant.Links(KnownSymbol sym, HasLink sub) => HasLink (QueryFlag sym :> sub)Defined in servant-0.20.2 · Servant.Links(KnownSymbol sym, HasLink sub) => HasLink (sym :> sub)Defined in servant-0.20.2 · Servant.Links(ToHttpApiData v, HasLink sub) => HasLink (Capture' mods sym v :> sub)Defined in servant-0.20.2 · Servant.Links(ToHttpApiData v, HasLink sub) => HasLink (CaptureAll sym v :> sub)Defined in servant-0.20.2 · Servant.Links(HasLink sub, ToHttpApiData v) => HasLink (Fragment v :> sub)Defined in servant-0.20.2 · Servant.Linkstype MkLink (HttpVersion :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (BasicAuth realm a :> sub) r = MkLink sub rDefined in servant-0.20.2 · Servant.Linkstype MkLink (Capture' mods sym v :> sub) a = v -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (CaptureAll sym v :> sub) a = [v] -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (Description s :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (Summary s :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (AuthProtect tag :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (Fragment v :> sub) a = v -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (Header' mods sym a :> sub) r = MkLink sub rDefined in servant-0.20.2 · Servant.Linkstype MkLink (IsSecure :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (QueryFlag sym :> sub) a = Bool -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (QueryParam' mods sym v :> sub) a = If (FoldRequired mods) v (Maybe v) -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (QueryParams sym v :> sub) a = [v] -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (RemoteHost :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (ReqBody' mods ct a :> sub) r = MkLink sub rDefined in servant-0.20.2 · Servant.Linkstype MkLink (StreamBody' mods framing ct a :> sub) r = MkLink sub rDefined in servant-0.20.2 · Servant.Linkstype MkLink (WithResource res :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (Vault :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (arr :> sub) _1 = TypeError (PartialApplication HasLink arr)Defined in servant-0.20.2 · Servant.Linkstype MkLink (sym :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (HttpVersion :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (Capture' mods sym t :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (CaptureAll sym t :> sublayout) = Foreign ftype sublayoutDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (Description desc :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (Summary desc :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (Fragment a :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (Header' mods sym a :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (IsSecure :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (QueryFlag sym :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (QueryParam' mods sym a :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (QueryParams sym a :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (RemoteHost :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (ReqBody' mods list a :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (StreamBody' mods framing ctype a :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (WithResource res :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (Vault :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype Foreign ftype (path :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Capture all remaining values from the request path under a certain type
a.
Example:
-- GET /src/*type MyAPI = "src" :> CaptureAll "segments" Text :> Get '[JSON] SourceFile
Instances4HasForeign, HasLink, MkLink, Foreign
(KnownSymbol sym, HasForeignType lang ftype [t], HasForeign lang ftype sublayout) => HasForeign lang ftype (CaptureAll sym t :> sublayout)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(ToHttpApiData v, HasLink sub) => HasLink (CaptureAll sym v :> sub)Defined in servant-0.20.2 · Servant.Linkstype MkLink (CaptureAll sym v :> sub) a = [v] -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (CaptureAll sym t :> sublayout) = Foreign ftype sublayoutDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Instances5Accept, MimeRender, MimeUnrender
Accept JSONDefined in servant-0.20.2 · Servant.API.ContentTypesapplication/jsonToJSON a => MimeRender JSON aDefined in servant-0.20.2 · Servant.API.ContentTypesFromJSON a => MimeUnrender JSON aDefined in servant-0.20.2 · Servant.API.ContentTypesMimeRender JSON a => MimeRender JSON (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeUnrender JSON a => MimeUnrender JSON (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerb
Methods
reflectMethod :: Proxy a -> Method
Instances9ReflectMethod, …
ReflectMethod 'CONNECTDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'DELETEDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'GETDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'HEADDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'OPTIONSDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'PATCHDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'POSTDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'PUTDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'TRACEDefined in servant-0.20.2 · Servant.API.Verbs
Verb is a general type for representing HTTP verbs (a.k.a. methods). For
convenience, type synonyms for each verb with a 200 response code are
provided, but you are free to define your own:
type Post204 contentTypes a = Verb 'POST 204 contentTypes aInstances7HasForeign, HasLink, Generic, AtMostOneFragment, Rep, MkLink, …
(Elem JSON list, HasForeignType lang ftype a, ReflectMethod method) => HasForeign lang ftype (Verb method status list a)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasLink (Verb m s ct a)Defined in servant-0.20.2 · Servant.LinksGeneric (Verb method statusCode contentTypes a)Defined in servant-0.20.2 · Servant.API.VerbsAtMostOneFragment (Verb m s ct typ)Defined in servant-0.20.2 · Servant.API.TypeLeveltype Rep (Verb method statusCode contentTypes a) = D1 ('MetaDataDefined in servant-0.20.2 · Servant.API.Verbs"Verb"
"Servant.API.Verbs"
"servant-0.20.2-kmMZib8zXn7e8NZPkSX15"
'False) V1type MkLink (Verb m s ct a) r = rDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (Verb method status list a) = Req ftypeDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
NoContentVerb is a specific type to represent NoContent responses.
It does not require either a list of content types (because there's
no content) or a status code (because it should always be 204).
Instances6HasForeign, HasLink, Generic, Rep, MkLink, Foreign
(HasForeignType lang ftype NoContent, ReflectMethod method) => HasForeign lang ftype (NoContentVerb method)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasLink (NoContentVerb m)Defined in servant-0.20.2 · Servant.LinksGeneric (NoContentVerb method)Defined in servant-0.20.2 · Servant.API.Verbstype Rep (NoContentVerb method) = D1 ('MetaDataDefined in servant-0.20.2 · Servant.API.Verbs"NoContentVerb"
"Servant.API.Verbs"
"servant-0.20.2-kmMZib8zXn7e8NZPkSX15"
'False) V1type MkLink (NoContentVerb m) r = rDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (NoContentVerb method) = Req ftypeDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
A Stream endpoint for a given method emits a stream of encoded values at a
given Content-Type, delimited by a framing strategy.
Type synonyms are provided for standard methods.
Instances6HasForeign, HasLink, Generic, Rep, MkLink, Foreign
(ct ~ JSON, HasForeignType lang ftype a, ReflectMethod method) => HasForeign lang ftype (Stream method status framing ct a)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalTODO: doesn't taking framing into account.
HasLink (Stream m status fr ct a)Defined in servant-0.20.2 · Servant.LinksGeneric (Stream method status framing contentType a)Defined in servant-0.20.2 · Servant.API.Streamtype Rep (Stream method status framing contentType a) = D1 ('MetaDataDefined in servant-0.20.2 · Servant.API.Stream"Stream"
"Servant.API.Stream"
"servant-0.20.2-kmMZib8zXn7e8NZPkSX15"
'False) V1type MkLink (Stream m status fr ct a) r = rDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (Stream method status framing ct a) = Req ftypeDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Instances9AddHeader, HasForeign, HasResponseHeader, HasLink, BuildHeadersTo, GetHeaders', …
(KnownSymbol h, ToHttpApiData v) => AddHeader mods h v (Headers (fst ': rest) a) (Headers (Header' mods h v ': fst ': rest) a)Defined in servant-0.20.2 · Servant.API.ResponseHeaders(KnownSymbol sym, HasForeignType lang ftype (RequiredArgument mods a), HasForeign lang ftype api) => HasForeign lang ftype (Header' mods sym a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasResponseHeader h a (Header' mods h a ': rest)Defined in servant-0.20.2 · Servant.API.ResponseHeadersHasLink sub => HasLink (Header' mods sym a :> sub)Defined in servant-0.20.2 · Servant.Links(FromHttpApiData v, BuildHeadersTo xs, KnownSymbol h) => BuildHeadersTo (Header' mods h v ': xs)Defined in servant-0.20.2 · Servant.API.ResponseHeaders(KnownSymbol h, GetHeadersFromHList rest, ToHttpApiData v) => GetHeaders' (Header' mods h v ': rest)Defined in servant-0.20.2 · Servant.API.ResponseHeaders(KnownSymbol h, ToHttpApiData x, GetHeadersFromHList xs) => GetHeadersFromHList (Header' mods h x ': xs)Defined in servant-0.20.2 · Servant.API.ResponseHeaderstype MkLink (Header' mods sym a :> sub) r = MkLink sub rDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (Header' mods sym a :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
QueryParam which can be Required, Lenient, or modified otherwise.
Instances4HasForeign, HasLink, MkLink, Foreign
(KnownSymbol sym, HasForeignType lang ftype (RequiredArgument mods a), HasForeign lang ftype api) => HasForeign lang ftype (QueryParam' mods sym a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol sym, ToHttpApiData v, HasLink sub, SBoolI (FoldRequired mods)) => HasLink (QueryParam' mods sym v :> sub)Defined in servant-0.20.2 · Servant.Linkstype MkLink (QueryParam' mods sym v :> sub) a = If (FoldRequired mods) v (Maybe v) -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (QueryParam' mods sym a :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Lookup the values associated to the sym query string parameter
and try to extract it as a value of type [a]. This is typically
meant to support query string parameters of the form
param[]=val1¶m[]=val2 and so on. Note that servant doesn't actually
require the []s and will fetch the values just fine with
param=val1¶m=val2, too.
Example:
-- /books?authors[]=<author1>&authors[]=<author2>&...type MyApi = "books" :> QueryParams "authors" Text :> Get '[JSON] [Book]
Instances4HasForeign, HasLink, MkLink, Foreign
(KnownSymbol sym, HasForeignType lang ftype [a], HasForeign lang ftype api) => HasForeign lang ftype (QueryParams sym a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol sym, ToHttpApiData v, HasLink sub) => HasLink (QueryParams sym v :> sub)Defined in servant-0.20.2 · Servant.Linkstype MkLink (QueryParams sym v :> sub) a = [v] -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (QueryParams sym a :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Lookup a potentially value-less query string parameter
with boolean semantics. If the param sym is there without any value,
or if it's there with value "true" or "1", it's interpreted as True.
Otherwise, it's interpreted as False.
Example:
-- /books?publishedtype MyApi = "books" :> QueryFlag "published" :> Get '[JSON] [Book]
Instances4HasForeign, HasLink, MkLink, Foreign
(KnownSymbol sym, HasForeignType lang ftype Bool, HasForeign lang ftype api) => HasForeign lang ftype (QueryFlag sym :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(KnownSymbol sym, HasLink sub) => HasLink (QueryFlag sym :> sub)Defined in servant-0.20.2 · Servant.Linkstype MkLink (QueryFlag sym :> sub) a = Bool -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (QueryFlag sym :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Document the URI fragment in API. Useful in combination with Link.
Example:
-- /post#TRACKINGtype MyApi = "post" :> Fragment Text :> Get '[JSON] Tracking
Instances5HasForeign, HasLink, AtMostOneFragment, MkLink, Foreign
(HasForeignType lang ftype (Maybe a), HasForeign lang ftype api) => HasForeign lang ftype (Fragment a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(HasLink sub, ToHttpApiData v) => HasLink (Fragment v :> sub)Defined in servant-0.20.2 · Servant.LinksAtMostOneFragment (Fragment a)Defined in servant-0.20.2 · Servant.API.TypeLeveltype MkLink (Fragment v :> sub) a = v -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (Fragment a :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Endpoint for plugging in your own Wai Applications.
The given Application will get the request as received by the server, potentially with
a modified (stripped) pathInfo if the Application is being routed with :>.
In addition to just letting you plug in your existing WAI Applications,
this can also be used with functions from
Servant.Server.StaticFiles
to serve static files stored in a particular directory on your filesystem
Instances4HasLink, HasForeign, MkLink, Foreign
HasLink RawDefined in servant-0.20.2 · Servant.LinksHasForeign lang ftype RawDefined in servant-foreign-0.16.1 · Servant.Foreign.Internaltype MkLink Raw a = aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype Raw = Method -> Req ftypeDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Instances4HasForeign, HasLink, MkLink, Foreign
(Elem JSON list, HasForeignType lang ftype a, HasForeign lang ftype api) => HasForeign lang ftype (ReqBody' mods list a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasLink sub => HasLink (ReqBody' mods ct a :> sub)Defined in servant-0.20.2 · Servant.Linkstype MkLink (ReqBody' mods ct a :> sub) r = MkLink sub rDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (ReqBody' mods list a :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Instances6HasForeign, HasLink, Generic, Rep, MkLink, Foreign
HasForeign lang ftype api => HasForeign lang ftype (StreamBody' mods framing ctype a :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasLink sub => HasLink (StreamBody' mods framing ct a :> sub)Defined in servant-0.20.2 · Servant.LinksGeneric (StreamBody' mods framing contentType a)Defined in servant-0.20.2 · Servant.API.Streamtype Rep (StreamBody' mods framing contentType a) = D1 ('MetaDataDefined in servant-0.20.2 · Servant.API.Stream"StreamBody'"
"Servant.API.Stream"
"servant-0.20.2-kmMZib8zXn7e8NZPkSX15"
'False) V1type MkLink (StreamBody' mods framing ct a :> sub) r = MkLink sub rDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (StreamBody' mods framing ctype a :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Provides access to the host or IP address from which the HTTP request was sent.
Instances4HasForeign, HasLink, MkLink, Foreign
HasForeign lang ftype api => HasForeign lang ftype (RemoteHost :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasLink sub => HasLink (RemoteHost :> sub)Defined in servant-0.20.2 · Servant.Linkstype MkLink (RemoteHost :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (RemoteHost :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Was this request made over an SSL connection?
Note that this value will not tell you if the client originally made this request over SSL, but rather whether the current connection is SSL. The distinction lies with reverse proxies. In many cases, the client will connect to a load balancer over SSL, but connect to the WAI handler without SSL. In such a case, the handlers would get NotSecure, but from a user perspective, there is a secure connection.
Instances10Eq, Ord, Read, Show, Generic, HasForeign, …
Eq IsSecureDefined in servant-0.20.2 · Servant.API.IsSecureOrd IsSecureDefined in servant-0.20.2 · Servant.API.IsSecureRead IsSecureDefined in servant-0.20.2 · Servant.API.IsSecureShow IsSecureDefined in servant-0.20.2 · Servant.API.IsSecureGeneric IsSecureDefined in servant-0.20.2 · Servant.API.IsSecureHasForeign lang ftype api => HasForeign lang ftype (IsSecure :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasLink sub => HasLink (IsSecure :> sub)Defined in servant-0.20.2 · Servant.Linkstype Rep IsSecure = D1 ('MetaDataDefined in servant-0.20.2 · Servant.API.IsSecure"IsSecure"
"Servant.API.IsSecure"
"servant-0.20.2-kmMZib8zXn7e8NZPkSX15"
'False) (C1 ('MetaCons"Secure"
'PrefixI 'False) U1 :+: C1 ('MetaCons"NotSecure"
'PrefixI 'False) U1)type MkLink (IsSecure :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (IsSecure :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Instances4HasForeign, HasLink, MkLink, Foreign
HasForeign lang ftype api => HasForeign lang ftype (Vault :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasLink sub => HasLink (Vault :> sub)Defined in servant-0.20.2 · Servant.Linkstype MkLink (Vault :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (Vault :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
WithNamedContext names a specific tagged context to use for the
combinators in the API. (See also in servant-server,
Servant.Server.Context.) For example:
type UseNamedContextAPI = WithNamedContext "myContext" '[String] (
ReqBody '[JSON] Int :> Get '[JSON] Int)Both the ReqBody and Get combinators will use the WithNamedContext with
type tag "myContext" as their context.
Contexts are only relevant for servant-server.
For more information, see the tutorial.
Instances4HasForeign, HasLink, MkLink, Foreign
HasForeign lang ftype api => HasForeign lang ftype (WithNamedContext name context api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasLink sub => HasLink (WithNamedContext name context sub)Defined in servant-0.20.2 · Servant.Linkstype MkLink (WithNamedContext name context sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (WithNamedContext name context api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Instances4HasForeign, HasLink, MkLink, Foreign
HasForeign lang ftype api => HasForeign lang ftype (WithResource res :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasLink sub => HasLink (WithResource res :> sub)Defined in servant-0.20.2 · Servant.Linkstype MkLink (WithResource res :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (WithResource res :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
HTTP Version.
Note that the Show instance is intended merely for debugging.
Constructors
Instances10Eq, Data, Ord, Show, Generic, HasForeign, …
Eq HttpVersionDefined in http-types-0.12.4 · Network.HTTP.Types.VersionData HttpVersionDefined in http-types-0.12.4 · Network.HTTP.Types.VersionOrd HttpVersionDefined in http-types-0.12.4 · Network.HTTP.Types.VersionShow HttpVersionDefined in http-types-0.12.4 · Network.HTTP.Types.VersionExample1 expression show http11"HTTP/1.1"
Generic HttpVersionDefined in http-types-0.12.4 · Network.HTTP.Types.VersionHasForeign lang ftype api => HasForeign lang ftype (HttpVersion :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasLink sub => HasLink (HttpVersion :> sub)Defined in servant-0.20.2 · Servant.Linkstype Rep HttpVersion = D1 ('MetaDataDefined in http-types-0.12.4 · Network.HTTP.Types.Version"HttpVersion"
"Network.HTTP.Types.Version"
"http-types-0.12.4-KkMxTblWZY5WJ4M2x8W7s"
'False) (C1 ('MetaCons"HttpVersion"
'PrefixI 'True) (S1 ('MetaSel ('Just"httpMajor"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int) :*: S1 ('MetaSel ('Just"httpMinor"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int)))type MkLink (HttpVersion :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (HttpVersion :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Add a short summary for (part of) API.
Example:
type MyApi = Summary "Get book by ISBN." :> "books" :> Capture "isbn" Text :> Get '[JSON] BookInstances4HasForeign, HasLink, MkLink, Foreign
HasForeign lang ftype api => HasForeign lang ftype (Summary desc :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasLink sub => HasLink (Summary s :> sub)Defined in servant-0.20.2 · Servant.Linkstype MkLink (Summary s :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (Summary desc :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Add more verbose description for (part of) API.
Example:
:{type MyApi = Description "This comment is visible in multiple Servant interpretations \ \and can be really long if necessary. \ \Haskell multiline String support is not perfect \ \but it's still very readable.":> Get '[JSON] Book:}
Instances4HasForeign, HasLink, MkLink, Foreign
HasForeign lang ftype api => HasForeign lang ftype (Description desc :> api)Defined in servant-foreign-0.16.1 · Servant.Foreign.InternalHasLink sub => HasLink (Description s :> sub)Defined in servant-0.20.2 · Servant.Linkstype MkLink (Description s :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype Foreign ftype (Description desc :> api) = Foreign ftype apiDefined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Combinator for embedding a record of named routes into a Servant API type.
Instances4HasForeign, HasLink, MkLink, Foreign
HasForeign lang ftype (ToServantApi r) => HasForeign lang ftype (NamedRoutes r)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal(HasLink (ToServantApi routes), forall a. GLink routes a, ErrorIfNoGeneric routes) => HasLink (NamedRoutes routes)Defined in servant-0.20.2 · Servant.Linkstype MkLink (NamedRoutes routes) a = routes (AsLink a)Defined in servant-0.20.2 · Servant.Linkstype Foreign ftype (NamedRoutes r) = Foreign ftype (ToServantApi r)Defined in servant-foreign-0.16.1 · Servant.Foreign.Internal
Strictly parsed argument. Not wrapped.
Extract the given header's value as a value of type a.
I.e. header sent by client, parsed by server.
Example:
newtype Referer = Referer Text deriving (Eq, Show) -- GET /view-my-referertype MyApi = "view-my-referer" :> Header "from" Referer :> Get '[JSON] Referer
Constructors
Instances4Functor, Eq, Show, NFData
Functor (ResponseHeader sym)Defined in servant-0.20.2 · Servant.API.ResponseHeadersEq a => Eq (ResponseHeader sym a)Defined in servant-0.20.2 · Servant.API.ResponseHeadersShow a => Show (ResponseHeader sym a)Defined in servant-0.20.2 · Servant.API.ResponseHeadersNFData a => NFData (ResponseHeader sym a)Defined in servant-0.20.2 · Servant.API.ResponseHeaders
HTTP standard method (as defined by RFC 2616, and PATCH which is defined by RFC 5789).
Instances19Bounded, Enum, Eq, Data, Ord, Read, …
Bounded StdMethodDefined in http-types-0.12.4 · Network.HTTP.Types.MethodEnum StdMethodDefined in http-types-0.12.4 · Network.HTTP.Types.MethodEq StdMethodDefined in http-types-0.12.4 · Network.HTTP.Types.MethodData StdMethodDefined in http-types-0.12.4 · Network.HTTP.Types.MethodOrd StdMethodDefined in http-types-0.12.4 · Network.HTTP.Types.MethodRead StdMethodDefined in http-types-0.12.4 · Network.HTTP.Types.MethodShow StdMethodDefined in http-types-0.12.4 · Network.HTTP.Types.MethodIx StdMethodDefined in http-types-0.12.4 · Network.HTTP.Types.MethodGeneric StdMethodDefined in http-types-0.12.4 · Network.HTTP.Types.MethodReflectMethod 'CONNECTDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'DELETEDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'GETDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'HEADDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'OPTIONSDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'PATCHDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'POSTDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'PUTDefined in servant-0.20.2 · Servant.API.VerbsReflectMethod 'TRACEDefined in servant-0.20.2 · Servant.API.Verbstype Rep StdMethod = D1 ('MetaDataDefined in http-types-0.12.4 · Network.HTTP.Types.Method"StdMethod"
"Network.HTTP.Types.Method"
"http-types-0.12.4-KkMxTblWZY5WJ4M2x8W7s"
'False) (((C1 ('MetaCons"GET"
'PrefixI 'False) U1 :+: C1 ('MetaCons"POST"
'PrefixI 'False) U1) :+: (C1 ('MetaCons"HEAD"
'PrefixI 'False) U1 :+: C1 ('MetaCons"PUT"
'PrefixI 'False) U1)) :+: ((C1 ('MetaCons"DELETE"
'PrefixI 'False) U1 :+: C1 ('MetaCons"TRACE"
'PrefixI 'False) U1) :+: (C1 ('MetaCons"CONNECT"
'PrefixI 'False) U1 :+: (C1 ('MetaCons"OPTIONS"
'PrefixI 'False) U1 :+: C1 ('MetaCons"PATCH"
'PrefixI 'False) U1))))
Combinator for Basic Access Authentication.
IMPORTANT*: Only use Basic Auth over HTTPS! Credentials are not hashed or encrypted. Note also that because the same credentials are sent on every request, Basic Auth is not as secure as some alternatives. Further, the implementation in servant-server does not protect against some types of timing attacks.
In Basic Auth, username and password are base64-encoded and transmitted via
the Authorization header. Handshakes are not required, making it
relatively efficient.
A simple datatype to hold data required to decorate a request
Constructors
Capture a value from the request path under a certain type a.
Example:
-- GET /books/:isbntype MyApi = "books" :> Capture "isbn" Text :> Get '[JSON] Book
Instances of Accept represent mimetypes. They are used for matching
against the Accept HTTP header of the request, and for setting the
Content-Type header of the response
Example:
import Network.HTTP.Media ((//), (/:))data HTML:{instance Accept HTML where contentType _ = "text" // "html" /: ("charset", "utf-8"):}
Methods
contentType :: Proxy ctype -> MediaTypecontentTypes :: Proxy ctype -> NonEmpty MediaType
Instances4Accept
Accept FormUrlEncodedDefined in servant-0.20.2 · Servant.API.ContentTypesapplication/x-www-form-urlencodedAccept JSONDefined in servant-0.20.2 · Servant.API.ContentTypesapplication/jsonAccept OctetStreamDefined in servant-0.20.2 · Servant.API.ContentTypesapplication/octet-streamAccept PlainTextDefined in servant-0.20.2 · Servant.API.ContentTypestext/plain;charset=utf-8
Instances5Accept, MimeRender, MimeUnrender
Accept FormUrlEncodedDefined in servant-0.20.2 · Servant.API.ContentTypesapplication/x-www-form-urlencodedToForm a => MimeRender FormUrlEncoded aDefined in servant-0.20.2 · Servant.API.ContentTypesurlEncodeAsFormNote that themimeUnrender p (mimeRender p x) == Right xlaw only holds if every element of x is non-null (i.e., not("", ""))FromForm a => MimeUnrender FormUrlEncoded aDefined in servant-0.20.2 · Servant.API.ContentTypesurlDecodeAsFormNote that themimeUnrender p (mimeRender p x) == Right xlaw only holds if every element of x is non-null (i.e., not("", ""))MimeRender FormUrlEncoded a => MimeRender FormUrlEncoded (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeUnrender FormUrlEncoded a => MimeUnrender FormUrlEncoded (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerb
Instantiate this class to register a way of serializing a type based
on the Accept header.
Example:
data MyContentType
instance Accept MyContentType where
contentType _ = "example" // "prs.me.mine" /: ("charset", "utf-8")
instance Show a => MimeRender MyContentType a where
mimeRender _ val = pack ("This is MINE! " ++ show val)
type MyAPI = "path" :> Get '[MyContentType] IntMethods
mimeRender :: Proxy ctype -> a -> ByteString
Instances11MimeRender, …
ToJSON a => MimeRender JSON aDefined in servant-0.20.2 · Servant.API.ContentTypesToForm a => MimeRender FormUrlEncoded aDefined in servant-0.20.2 · Servant.API.ContentTypesurlEncodeAsFormNote that themimeUnrender p (mimeRender p x) == Right xlaw only holds if every element of x is non-null (i.e., not("", ""))MimeRender OctetStream ByteStringDefined in servant-0.20.2 · Servant.API.ContentTypesMimeRender OctetStream ByteStringDefined in servant-0.20.2 · Servant.API.ContentTypesidMimeRender PlainText StringDefined in servant-0.20.2 · Servant.API.ContentTypesBC.packMimeRender PlainText TextDefined in servant-0.20.2 · Servant.API.ContentTypesfromStrict . TextS.encodeUtf8MimeRender PlainText TextDefined in servant-0.20.2 · Servant.API.ContentTypesMimeRender FormUrlEncoded a => MimeRender FormUrlEncoded (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeRender JSON a => MimeRender JSON (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeRender OctetStream a => MimeRender OctetStream (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeRender PlainText a => MimeRender PlainText (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerb
Instantiate this class to register a way of deserializing a type based
on the request's Content-Type header.
import Network.HTTP.Media hiding (Accept)import qualified Data.ByteString.Lazy.Char8 as BSCdata MyContentType = MyContentType String
:{instance Accept MyContentType where contentType _ = "example" // "prs.me.mine" /: ("charset", "utf-8"):}
:{instance Read a => MimeUnrender MyContentType a where mimeUnrender _ bs = case BSC.take 12 bs of "MyContentType" -> return . read . BSC.unpack $ BSC.drop 12 bs _ -> Left "didn't start with the magic incantation":}
type MyAPI = "path" :> ReqBody '[MyContentType] Int :> Get '[JSON] IntMethods
mimeUnrender :: Proxy ctype -> ByteString -> Either String amimeUnrenderWithType :: Proxy ctype -> MediaType -> ByteString -> Either String a
Instances11MimeUnrender, …
FromJSON a => MimeUnrender JSON aDefined in servant-0.20.2 · Servant.API.ContentTypesFromForm a => MimeUnrender FormUrlEncoded aDefined in servant-0.20.2 · Servant.API.ContentTypesurlDecodeAsFormNote that themimeUnrender p (mimeRender p x) == Right xlaw only holds if every element of x is non-null (i.e., not("", ""))MimeUnrender OctetStream ByteStringDefined in servant-0.20.2 · Servant.API.ContentTypesRight . toStrictMimeUnrender OctetStream ByteStringDefined in servant-0.20.2 · Servant.API.ContentTypesRight . idMimeUnrender PlainText StringDefined in servant-0.20.2 · Servant.API.ContentTypesRight . BC.unpackMimeUnrender PlainText TextDefined in servant-0.20.2 · Servant.API.ContentTypesleft show . TextS.decodeUtf8' . toStrictMimeUnrender PlainText TextDefined in servant-0.20.2 · Servant.API.ContentTypesleft show . TextL.decodeUtf8'MimeUnrender FormUrlEncoded a => MimeUnrender FormUrlEncoded (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeUnrender JSON a => MimeUnrender JSON (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeUnrender OctetStream a => MimeUnrender OctetStream (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeUnrender PlainText a => MimeUnrender PlainText (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerb
Instances7Accept, MimeRender, MimeUnrender, …
Accept OctetStreamDefined in servant-0.20.2 · Servant.API.ContentTypesapplication/octet-streamMimeRender OctetStream ByteStringDefined in servant-0.20.2 · Servant.API.ContentTypesMimeRender OctetStream ByteStringDefined in servant-0.20.2 · Servant.API.ContentTypesidMimeUnrender OctetStream ByteStringDefined in servant-0.20.2 · Servant.API.ContentTypesRight . toStrictMimeUnrender OctetStream ByteStringDefined in servant-0.20.2 · Servant.API.ContentTypesRight . idMimeRender OctetStream a => MimeRender OctetStream (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeUnrender OctetStream a => MimeUnrender OctetStream (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerb
Instances9Accept, MimeRender, MimeUnrender, …
Accept PlainTextDefined in servant-0.20.2 · Servant.API.ContentTypestext/plain;charset=utf-8MimeRender PlainText StringDefined in servant-0.20.2 · Servant.API.ContentTypesBC.packMimeRender PlainText TextDefined in servant-0.20.2 · Servant.API.ContentTypesfromStrict . TextS.encodeUtf8MimeRender PlainText TextDefined in servant-0.20.2 · Servant.API.ContentTypesMimeUnrender PlainText StringDefined in servant-0.20.2 · Servant.API.ContentTypesRight . BC.unpackMimeUnrender PlainText TextDefined in servant-0.20.2 · Servant.API.ContentTypesleft show . TextS.decodeUtf8' . toStrictMimeUnrender PlainText TextDefined in servant-0.20.2 · Servant.API.ContentTypesleft show . TextL.decodeUtf8'MimeRender PlainText a => MimeRender PlainText (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeUnrender PlainText a => MimeUnrender PlainText (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerb
A generalized Authentication combinator. Use this if you have a non-standard authentication technique.
NOTE: THIS API IS EXPERIMENTAL AND SUBJECT TO CHANGE.
Instances2HasLink, MkLink
HasLink sub => HasLink (AuthProtect tag :> sub)Defined in servant-0.20.2 · Servant.Linkstype MkLink (AuthProtect tag :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Links
A class with a type family that applies an appropriate type family to the api
parameter. For example, AsApi will leave api untouched, while
will produce AsServerT m.ServerT api m
Associated types
type family (:-) (mode :: k) api
Instances2GenericMode
GenericMode AsApiDefined in servant-0.20.2 · Servant.API.GenericGenericMode (AsLink a)Defined in servant-0.20.2 · Servant.Links
A type that specifies that an API record contains an API definition. Only useful at type-level.
Instances2GenericMode, :-
GenericMode AsApiDefined in servant-0.20.2 · Servant.API.Generictype (:-) AsApi api = apiDefined in servant-0.20.2 · Servant.API.Generic
Instances3GServantProduct
GServantProduct (K1 i c)Defined in servant-0.20.2 · Servant.API.Generic(GServantProduct l, GServantProduct r) => GServantProduct (l :*: r)Defined in servant-0.20.2 · Servant.API.GenericGServantProduct f => GServantProduct (M1 i c f)Defined in servant-0.20.2 · Servant.API.Generic
type GenericServant (routes :: k -> Type) (mode :: k) = (GenericMode mode, Generic (routes mode), GServantProduct (Rep (routes mode)))A constraint alias, for work with mode and routes.
Turns a generic product type into a tree of :<|> combinators.
Inverse of toServant.
This can be used to turn generated values such as client functions into records.
You may need to provide a type signature for the output type (your record type).
Get a Proxy of an API type.
See ToServant, but at value-level.
Optional argument. Wrapped in Maybe.
Required argument. Not wrapped.
Lookup the value associated to the sym query string parameter
and try to extract it as a value of type a.
Example:
-- /books?author=<author name>type MyApi = "books" :> QueryParam "author" Text :> Get '[JSON] [Book]
Extract an deep object from a query string.
Example:
-- /books?filter[author][name]=<author name>&filter[year]=<book year>type MyApi = "books" :> DeepQuery "filter" BookQuery :> Get '[JSON] [Book]
Extract the whole query string from a request. This is useful for query strings
containing dynamic parameter names. For query strings with static parameter names,
QueryParam is more suited.
Example:
-- /books?author=<author name>&year=<book year>type MyApi = "books" :> QueryString :> Get '[JSON] [Book]
Variant of Raw that lets you access the underlying monadic context to process the request.
Extract the request body as a value of type a.
Example:
-- POST /bookstype MyApi = "books" :> ReqBody '[JSON] Book :> Post '[JSON] Book
class AddHeader (mods :: [Type]) (h :: Symbol) v orig new | mods h v orig -> new, new -> mods, new -> h, new -> v, new -> orig whereInstances4AddHeader
(KnownSymbol h, ToHttpApiData v, new ~ Headers '[Header' mods h v] a) => AddHeader mods h v a newDefined in servant-0.20.2 · Servant.API.ResponseHeadersAddHeader mods h v old new => AddHeader mods h v (Union '[old]) (Union '[new])Defined in servant-0.20.2 · Servant.API.ResponseHeaders(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))Defined in servant-0.20.2 · Servant.API.ResponseHeaders(KnownSymbol h, ToHttpApiData v) => AddHeader mods h v (Headers (fst ': rest) a) (Headers (Header' mods h v ': fst ': rest) a)Defined in servant-0.20.2 · Servant.API.ResponseHeaders
Methods
buildHeadersTo :: [Header] -> HList hs
Instances2BuildHeadersTo
BuildHeadersTo '[]Defined in servant-0.20.2 · Servant.API.ResponseHeaders(FromHttpApiData v, BuildHeadersTo xs, KnownSymbol h) => BuildHeadersTo (Header' mods h v ': xs)Defined in servant-0.20.2 · Servant.API.ResponseHeaders
Methods
getHeaders :: ls -> [Header]
Instances2GetHeaders
GetHeadersFromHList hs => GetHeaders (HList hs)Defined in servant-0.20.2 · Servant.API.ResponseHeadersGetHeaders' hs => GetHeaders (Headers hs a)Defined in servant-0.20.2 · Servant.API.ResponseHeaders
Instances2NFData, GetHeaders
NFDataHList xs => NFData (HList xs)Defined in servant-0.20.2 · Servant.API.ResponseHeadersGetHeadersFromHList hs => GetHeaders (HList hs)Defined in servant-0.20.2 · Servant.API.ResponseHeaders
Instances2HasResponseHeader
HasResponseHeader h a (Header' mods h a ': rest)Defined in servant-0.20.2 · Servant.API.ResponseHeadersHasResponseHeader h a rest => HasResponseHeader h a (first ': rest)Defined in servant-0.20.2 · Servant.API.ResponseHeaders
Response Header objects. You should never need to construct one directly.
Instead, use addOptionalHeader.
Constructors
HeadersgetResponse :: aThe underlying value of a Headers
getHeadersHList :: HList lsHList of headers.
Instances6AddHeader, Functor, NFData, GetHeaders, HasStatus, StatusOf
(KnownSymbol h, ToHttpApiData v) => AddHeader mods h v (Headers (fst ': rest) a) (Headers (Header' mods h v ': fst ': rest) a)Defined in servant-0.20.2 · Servant.API.ResponseHeadersFunctor (Headers ls)Defined in servant-0.20.2 · Servant.API.ResponseHeaders(NFDataHList ls, NFData a) => NFData (Headers ls a)Defined in servant-0.20.2 · Servant.API.ResponseHeadersGetHeaders' hs => GetHeaders (Headers hs a)Defined in servant-0.20.2 · Servant.API.ResponseHeadersHasStatus a => HasStatus (Headers ls a)Defined in servant-0.20.2 · Servant.API.UVerbtype StatusOf (Headers ls a) = StatusOf aDefined in servant-0.20.2 · Servant.API.UVerb
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] StringgetHeaders 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.
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] Stringlet example2 = addHeader True example1 :: Headers '[Header "1st" Bool, Header "someheader" Int] StringlookupResponseHeader example2 :: ResponseHeader "someheader" IntHeader 5
lookupResponseHeader example2 :: ResponseHeader "1st" BoolHeader 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 -XTypeApplicationscase lookupResponseHeader @"1st" example2 of { Header b -> b ; _ -> False }True
Deliberately do not add a header to a value.
let example1 = noHeader "hi" :: Headers '[Header "someheader" Int] StringgetHeaders example1[]
The FramingRender class provides the logic for emitting a framing strategy.
The strategy transforms a SourceT m a into SourceT m ByteString,
therefore it can prepend, append and intercalate framing structure
around chunks.
Note: as the Monad m is generic, this is pure transformation.
Methods
framingRender :: Monad m => Proxy strategy -> (a -> ByteString) -> SourceT m a -> SourceT m ByteString
Instances3FramingRender
FramingRender NetstringFramingDefined in servant-0.20.2 · Servant.API.StreamFramingRender NewlineFramingDefined in servant-0.20.2 · Servant.API.StreamFramingRender NoFramingDefined in servant-0.20.2 · Servant.API.Stream
The FramingUnrender class provides the logic for parsing a framing strategy.
Methods
framingUnrender :: Monad m => Proxy strategy -> (ByteString -> Either String a) -> SourceT m ByteString -> SourceT m a
Instances3FramingUnrender
FramingUnrender NetstringFramingDefined in servant-0.20.2 · Servant.API.StreamFramingUnrender NewlineFramingDefined in servant-0.20.2 · Servant.API.StreamFramingUnrender NoFramingDefined in servant-0.20.2 · Servant.API.StreamAs NoFraming doesn't have frame separators, we take the chunks as given and try to convert them one by one.
That works well when
ais aByteString.
FromSourceIO is intended to be implemented for types such as Conduit, Pipe, etc. By implementing this class, all such streaming abstractions can be used directly on the client side for talking to streaming endpoints.
Methods
fromSourceIO :: SourceIO chunk -> IO a
Instances1FromSourceIO
MonadIO m => FromSourceIO a (SourceT m a)Defined in servant-0.20.2 · Servant.API.Stream
The netstring framing strategy as defined by djb: http://cr.yp.to/proto/netstrings.txt
Any string of 8-bit bytes may be encoded as [len]":"[string]",". Here
[string] is the string and [len] is a nonempty sequence of ASCII digits
giving the length of [string] in decimal. The ASCII digits are 30 for
0, 31 for 1, and so on up through 39 for 9. Extra zeros at the front
of [len] are prohibited: [len] begins with 30 exactly when
[string] is empty.
For example, the string "hello world!" is encoded as
32 3a 68 65 6c 6c 6f 20 77 6f 72 6c 64 21 2c,
i.e., "12:hello world!,".
The empty string is encoded as "0:,".
Instances2FramingRender, FramingUnrender
FramingRender NetstringFramingDefined in servant-0.20.2 · Servant.API.StreamFramingUnrender NetstringFramingDefined in servant-0.20.2 · Servant.API.Stream
A simple framing strategy that has no header, and inserts a newline character after each frame. This assumes that it is used with a Content-Type that encodes without newlines (e.g. JSON).
Instances2FramingRender, FramingUnrender
FramingRender NewlineFramingDefined in servant-0.20.2 · Servant.API.StreamFramingUnrender NewlineFramingDefined in servant-0.20.2 · Servant.API.Stream
A framing strategy that does not do any framing at all, it just passes the input data This will be used most of the time with binary data, such as files
Instances2FramingRender, FramingUnrender
FramingRender NoFramingDefined in servant-0.20.2 · Servant.API.StreamFramingUnrender NoFramingDefined in servant-0.20.2 · Servant.API.StreamAs NoFraming doesn't have frame separators, we take the chunks as given and try to convert them one by one.
That works well when
ais aByteString.
A stream request body.
ToSourceIO is intended to be implemented for types such as Conduit, Pipe, etc. By implementing this class, all such streaming abstractions can be used directly as endpoints.
Methods
toSourceIO :: a -> SourceIO chunk
Instances3ToSourceIO
ToSourceIO a (NonEmpty a)Defined in servant-0.20.2 · Servant.API.StreamToSourceIO a [a]Defined in servant-0.20.2 · Servant.API.StreamSourceToSourceIO m => ToSourceIO chunk (SourceT m chunk)Defined in servant-0.20.2 · Servant.API.StreamRelax to use auxiliary class, have m
Closed type family, check if endpoint is within api.
Uses IsElem' if it exhausts all other options.
ok (Proxy :: Proxy (IsElem ("hello" :> Get '[JSON] Int) SampleAPI))OK
ok (Proxy :: Proxy (IsElem ("bye" :> Get '[JSON] Int) SampleAPI))...... Could not ......
An endpoint is considered within an api even if it is missing combinators that don't affect the URL:
ok (Proxy :: Proxy (IsElem (Get '[JSON] Int) (Header "h" Bool :> Get '[JSON] Int)))OK
ok (Proxy :: Proxy (IsElem (Get '[JSON] Int) (ReqBody '[JSON] Bool :> Get '[JSON] Int)))OK
N.B.:*
IsElem a bcan be seen as capturing the notion of whether the URL represented byawould match the URL represented byb, *not* whether a request represented byamatches the endpoints servingb(for the latter, use IsIn).
Equations
IsElem e (sa :<|> sb) = Or (IsElem e sa) (IsElem e sb)IsElem (e :> sa) (e :> sb) = IsElem sa sbIsElem sa (Header sym x :> sb) = IsElem sa sbIsElem sa (Header' mods sym x :> sb) = IsElem sa sbIsElem sa (ReqBody y x :> sb) = IsElem sa sbIsElem (CaptureAll z y :> sa) (CaptureAll x y :> sb) = IsElem sa sbIsElem (Capture z y :> sa) (Capture x y :> sb) = IsElem sa sbIsElem sa (QueryParam x y :> sb) = IsElem sa sbIsElem sa (QueryParams x y :> sb) = IsElem sa sbIsElem sa (QueryFlag x :> sb) = IsElem sa sbIsElem sa (Fragment x :> sb) = IsElem sa sbIsElem (Verb m s ct typ) (Verb m s ct' typ) = IsSubList ct ct'IsElem e e = ()IsElem e (NamedRoutes rs) = IsElem e (ToServantApi rs)IsElem e a = IsElem' e a
You may use this type family to tell the type checker that your custom
type may be skipped as part of a link. This is useful for things like
QueryParam that are optional in a URI and do not affect them if they are
omitted.
data CustomThingtype instance IsElem' e (CustomThing :> s) = IsElem e s
Note that IsElem is called, which will mutually recurse back to IsElem'
if it exhausts all other options again.
Once you have written a HasLink instance for CustomThing you are ready to go.
Instances3HasStatus
HasStatus NoContentDefined in servant-0.20.2 · Servant.API.UVerbIf an API can respond with NoContent we assume that this will happen with the status code 204 No Content. If this needs to be overridden, WithStatus can be used.
KnownStatus n => HasStatus (WithStatus n a)Defined in servant-0.20.2 · Servant.API.UVerban instance of this typeclass assigns a HTTP status code to a return type
Example:
data NotFoundError = NotFoundError String instance HasStatus NotFoundError where type StatusOf NotFoundError = 404You can also use the convience newtype wrapper WithStatus if you want to avoid writing a HasStatus instance manually. It also has the benefit of showing the status code in the type; which might aid in readability.
HasStatus a => HasStatus (Headers ls a)Defined in servant-0.20.2 · Servant.API.UVerb
A variant of Verb that can have any of a number of response values and status codes.
FUTUREWORK: it would be nice to make Verb a special case of UVerb, and only write
instances for HasServer etc. for the latter, getting them for the former for free.
Something like:
type Verb method statusCode contentTypes a = UVerb method contentTypes [WithStatus statusCode a]Backwards compatibility is tricky, though: this type alias would mean people would have to
use respond instead of pure or return, so all old handlers would have to be rewritten.
A simple newtype wrapper that pairs a type with its status code. It implements all the content types that Servant ships with by default.
Constructors
Instances12MimeRender, MimeUnrender, Eq, Show, HasStatus, StatusOf, …
MimeRender FormUrlEncoded a => MimeRender FormUrlEncoded (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeRender JSON a => MimeRender JSON (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeRender OctetStream a => MimeRender OctetStream (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeRender PlainText a => MimeRender PlainText (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeUnrender FormUrlEncoded a => MimeUnrender FormUrlEncoded (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeUnrender JSON a => MimeUnrender JSON (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeUnrender OctetStream a => MimeUnrender OctetStream (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbMimeUnrender PlainText a => MimeUnrender PlainText (WithStatus _status a)Defined in servant-0.20.2 · Servant.API.UVerbEq a => Eq (WithStatus k a)Defined in servant-0.20.2 · Servant.API.UVerbShow a => Show (WithStatus k a)Defined in servant-0.20.2 · Servant.API.UVerbKnownStatus n => HasStatus (WithStatus n a)Defined in servant-0.20.2 · Servant.API.UVerban instance of this typeclass assigns a HTTP status code to a return type
Example:
data NotFoundError = NotFoundError String instance HasStatus NotFoundError where type StatusOf NotFoundError = 404You can also use the convience newtype wrapper WithStatus if you want to avoid writing a HasStatus instance manually. It also has the benefit of showing the status code in the type; which might aid in readability.
type StatusOf (WithStatus n a) = nDefined in servant-0.20.2 · Servant.API.UVerb
DELETE with 200 status code.
DELETE with 202 status code.
DELETE with 204 status code.
DELETE with 203 status code.
GET with 200 status code.
GET with 202 status code.
GET with 204 status code.
GET with 203 status code.
GET with 206 status code.
GET with 205 status code.
PATCH with 200 status code.
PATCH with 202 status code.
PATCH with 204 status code.
PATCH with 203 status code.
POST with 200 status code.
POST with 202 status code.
POST with 201 status code.
POST with 204 status code.
POST with 203 status code.
POST with 205 status code.
PUT with 200 status code.
PUT with 202 status code.
PUT with 201 status code.
PUT with 204 status code.
PUT with 203 status code.
Construct a toLink for an endpoint.
Associated types
type family MkLink (endpoint :: k) a
Instances32HasLink, …
TypeError (NoInstanceFor (HasLink api)) => HasLink apiDefined in servant-0.20.2 · Servant.LinksHasLink EmptyAPIDefined in servant-0.20.2 · Servant.LinksHasLink RawDefined in servant-0.20.2 · Servant.LinksHasLink RawMDefined in servant-0.20.2 · Servant.Links(HasLink (ToServantApi routes), forall a. GLink routes a, ErrorIfNoGeneric routes) => HasLink (NamedRoutes routes)Defined in servant-0.20.2 · Servant.LinksHasLink (NoContentVerb m)Defined in servant-0.20.2 · Servant.Links(HasLink a, HasLink b) => HasLink (a :<|> b)Defined in servant-0.20.2 · Servant.LinksTypeError (NoInstanceForSub HasLink ty) => HasLink (ty :> sub)Defined in servant-0.20.2 · Servant.LinksTypeError (PartialApplication HasLink arr) => HasLink (arr :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink (UVerb m ct a)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (HttpVersion :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (BasicAuth realm a :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (Description s :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (Summary s :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (AuthProtect tag :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (Header' mods sym a :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (IsSecure :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (RemoteHost :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (ReqBody' mods ct a :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (StreamBody' mods framing ct a :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (WithResource res :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (Vault :> sub)Defined in servant-0.20.2 · Servant.Links(KnownSymbol sym, ToHttpApiData v, HasLink sub) => HasLink (QueryParams sym v :> sub)Defined in servant-0.20.2 · Servant.Links(KnownSymbol sym, ToHttpApiData v, HasLink sub, SBoolI (FoldRequired mods)) => HasLink (QueryParam' mods sym v :> sub)Defined in servant-0.20.2 · Servant.Links(KnownSymbol sym, HasLink sub) => HasLink (QueryFlag sym :> sub)Defined in servant-0.20.2 · Servant.Links(KnownSymbol sym, HasLink sub) => HasLink (sym :> sub)Defined in servant-0.20.2 · Servant.Links(ToHttpApiData v, HasLink sub) => HasLink (Capture' mods sym v :> sub)Defined in servant-0.20.2 · Servant.Links(ToHttpApiData v, HasLink sub) => HasLink (CaptureAll sym v :> sub)Defined in servant-0.20.2 · Servant.Links(HasLink sub, ToHttpApiData v) => HasLink (Fragment v :> sub)Defined in servant-0.20.2 · Servant.LinksHasLink sub => HasLink (WithNamedContext name context sub)Defined in servant-0.20.2 · Servant.LinksHasLink (Verb m s ct a)Defined in servant-0.20.2 · Servant.LinksHasLink (Stream m status fr ct a)Defined in servant-0.20.2 · Servant.Links
Instances2Show, ToHttpApiData
Show LinkDefined in servant-0.20.2 · Servant.LinksToHttpApiData LinkDefined in servant-0.20.2 · Servant.Links
Instances30MkLink, …
type MkLink EmptyAPI a = EmptyAPIDefined in servant-0.20.2 · Servant.Linkstype MkLink Raw a = aDefined in servant-0.20.2 · Servant.Linkstype MkLink RawM a = aDefined in servant-0.20.2 · Servant.Linkstype MkLink (HttpVersion :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (BasicAuth realm a :> sub) r = MkLink sub rDefined in servant-0.20.2 · Servant.Linkstype MkLink (Capture' mods sym v :> sub) a = v -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (CaptureAll sym v :> sub) a = [v] -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (Description s :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (Summary s :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (AuthProtect tag :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (Fragment v :> sub) a = v -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (Header' mods sym a :> sub) r = MkLink sub rDefined in servant-0.20.2 · Servant.Linkstype MkLink (IsSecure :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (NamedRoutes routes) a = routes (AsLink a)Defined in servant-0.20.2 · Servant.Linkstype MkLink (QueryFlag sym :> sub) a = Bool -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (QueryParam' mods sym v :> sub) a = If (FoldRequired mods) v (Maybe v) -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (QueryParams sym v :> sub) a = [v] -> MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (RemoteHost :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (ReqBody' mods ct a :> sub) r = MkLink sub rDefined in servant-0.20.2 · Servant.Linkstype MkLink (Stream m status fr ct a) r = rDefined in servant-0.20.2 · Servant.Linkstype MkLink (StreamBody' mods framing ct a :> sub) r = MkLink sub rDefined in servant-0.20.2 · Servant.Linkstype MkLink (UVerb m ct a) r = rDefined in servant-0.20.2 · Servant.Linkstype MkLink (NoContentVerb m) r = rDefined in servant-0.20.2 · Servant.Linkstype MkLink (Verb m s ct a) r = rDefined in servant-0.20.2 · Servant.Linkstype MkLink (WithNamedContext name context sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (WithResource res :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (Vault :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Linkstype MkLink (a :<|> b) r = MkLink a r :<|> MkLink b rDefined in servant-0.20.2 · Servant.Linkstype MkLink (arr :> sub) _1 = TypeError (PartialApplication HasLink arr)Defined in servant-0.20.2 · Servant.Linkstype MkLink (sym :> sub) a = MkLink sub aDefined in servant-0.20.2 · Servant.Links
safeLink Create a valid (by construction) relative URI with query params.
This function will only typecheck if endpoint is part of the API api
Parse value from HTTP API data.
WARNING: Do not derive this using DeriveAnyClass as the generated
instance will loop indefinitely.
Methods
parseUrlPiece :: Text -> Either Text aParse URL path piece.
parseHeader :: ByteString -> Either Text aParse HTTP header value.
parseQueryParam :: Text -> Either Text aParse query param value.
Instances53FromHttpApiData, …
FromHttpApiData SetCookieDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataNote: this instance works correctly for alphanumeric name and value
Example1 expression parseUrlPiece "SESSID=r2t5uvjq435r4q7ib3vtdjq120" :: Either Text SetCookieRight (SetCookie {setCookieName = "SESSID", setCookieValue = "r2t5uvjq435r4q7ib3vtdjq120", setCookiePath = Nothing, setCookieExpires = Nothing, setCookieMaxAge = Nothing, setCookieDomain = Nothing, setCookieHttpOnly = False, setCookieSecure = False, setCookieSameSite = Nothing})
FromHttpApiData IntegerDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData NaturalDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData StringDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData VoidDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData AllDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData AnyDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData VersionDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression showVersion <$> parseUrlPiece "1.2.3"Right "1.2.3"
FromHttpApiData Int16Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData Int32Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData Int64Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData Int8Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData Word16Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData Word32Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData Word64Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData Word8Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData BoolDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData CharDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData DoubleDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData FloatDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData IntDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData OrderingDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData WordDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData TextDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData TextDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData DayDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression toGregorian <$> parseUrlPiece "2016-12-01"Right (2016,12,1)
FromHttpApiData MonthDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression parseUrlPiece "2021-01" :: Either Text MonthRight 2021-01
FromHttpApiData QuarterDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression parseUrlPiece "2021-q1" :: Either Text QuarterRight 2021-Q1
FromHttpApiData QuarterOfYearDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression parseUrlPiece "q2" :: Either Text QuarterOfYearRight Q2
Example1 expression parseUrlPiece "Q3" :: Either Text QuarterOfYearRight Q3
FromHttpApiData DayOfWeekDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression parseUrlPiece "Monday" :: Either Text DayOfWeekRight Monday
FromHttpApiData NominalDiffTimeDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData UTCTimeDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression parseUrlPiece "2015-10-03T00:14:24Z" :: Either Text UTCTimeRight 2015-10-03 00:14:24 UTC
FromHttpApiData LocalTimeDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression parseUrlPiece "2015-10-03T14:55:01" :: Either Text LocalTimeRight 2015-10-03 14:55:01
FromHttpApiData TimeOfDayDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression parseUrlPiece "14:55:01.333" :: Either Text TimeOfDayRight 14:55:01.333
FromHttpApiData ZonedTimeDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression parseUrlPiece "2015-10-03T14:55:01+0000" :: Either Text ZonedTimeRight 2015-10-03 14:55:01 +0000
Example1 expression parseQueryParam "2016-12-31T01:00:00Z" :: Either Text ZonedTimeRight 2016-12-31 01:00:00 +0000
FromHttpApiData UUIDDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData ()Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression parseUrlPiece "_" :: Either Text ()Right ()
FromHttpApiData a => FromHttpApiData (First a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData a => FromHttpApiData (Last a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData a => FromHttpApiData (Max a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData a => FromHttpApiData (Min a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData a => FromHttpApiData (Identity a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData a => FromHttpApiData (First a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData a => FromHttpApiData (Last a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData a => FromHttpApiData (Dual a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData a => FromHttpApiData (Product a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData a => FromHttpApiData (Sum a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData a => FromHttpApiData (Maybe a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression parseUrlPiece "Just 123" :: Either Text (Maybe Int)Right (Just 123)
FromHttpApiData a => FromHttpApiData (LenientData a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataHasResolution a => FromHttpApiData (Fixed a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataNote: this instance is not polykinded
(FromHttpApiData a, FromHttpApiData b) => FromHttpApiData (Either a b)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression parseUrlPiece "Right 123" :: Either Text (Either String Int)Right (Right 123)
FromHttpApiData a => FromHttpApiData (Const a b)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataFromHttpApiData a => FromHttpApiData (Tagged b a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataNote: this instance is not polykinded
Convert value to HTTP API data.
WARNING: Do not derive this using DeriveAnyClass as the generated
instance will loop indefinitely.
Methods
toUrlPiece :: a -> TextConvert to URL path piece.
toEncodedUrlPiece :: a -> BuilderConvert to a URL path piece, making sure to encode any special chars. The default definition uses
urlEncodeBuilder Falsebut this may be overriden with a more efficient version.toHeader :: a -> ByteStringConvert to HTTP header value.
toQueryParam :: a -> TextConvert to query param value.
toEncodedQueryParam :: a -> BuilderConvert to URL query param, The default definition uses
urlEncodeBuilder Truebut this may be overriden with a more efficient version.
Instances53ToHttpApiData, …
ToHttpApiData SetCookieDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataNote: this instance works correctly for alphanumeric name and value
Example2 expressions let Right c = parseUrlPiece "SESSID=r2t5uvjq435r4q7ib3vtdjq120" :: Either Text SetCookietoUrlPiece c"SESSID=r2t5uvjq435r4q7ib3vtdjq120"
Example1 expression toHeader c"SESSID=r2t5uvjq435r4q7ib3vtdjq120"
ToHttpApiData IntegerDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData NaturalDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData StringDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData VoidDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData AllDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData AnyDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData VersionDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression toUrlPiece (Version [1, 2, 3] [])"1.2.3"
ToHttpApiData Int16Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData Int32Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData Int64Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData Int8Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData Word16Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData Word32Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData Word64Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData Word8Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData BoolDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData CharDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData DoubleDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData FloatDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData IntDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData OrderingDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData WordDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData LinkDefined in servant-0.20.2 · Servant.LinksToHttpApiData TextDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData TextDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData DayDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression toUrlPiece (fromGregorian 2015 10 03)"2015-10-03"
ToHttpApiData MonthDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample2 expressions import Data.Time.Calendar.Month.Compat (Month (..))MkMonth 244822040-03
Example1 expression toUrlPiece $ MkMonth 24482"2040-03"
ToHttpApiData QuarterDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample2 expressions import Data.Time.Calendar.Quarter.Compat (Quarter (..))MkQuarter 80402010-Q1
Example1 expression toUrlPiece $ MkQuarter 8040"2010-q1"
ToHttpApiData QuarterOfYearDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression toUrlPiece Q4"q4"
ToHttpApiData DayOfWeekDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression toUrlPiece Monday"monday"
ToHttpApiData NominalDiffTimeDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData UTCTimeDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression toUrlPiece $ UTCTime (fromGregorian 2015 10 03) 864.5"2015-10-03T00:14:24.500Z"
ToHttpApiData LocalTimeDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression toUrlPiece $ LocalTime (fromGregorian 2015 10 03) (TimeOfDay 14 55 21.687)"2015-10-03T14:55:21.687"
ToHttpApiData TimeOfDayDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression toUrlPiece $ TimeOfDay 14 55 23.1"14:55:23.100"
ToHttpApiData ZonedTimeDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression toUrlPiece $ ZonedTime (LocalTime (fromGregorian 2015 10 03) (TimeOfDay 14 55 51.001)) utc"2015-10-03T14:55:51.001Z"
Example1 expression toUrlPiece $ ZonedTime (LocalTime (fromGregorian 2015 10 03) (TimeOfDay 14 55 51.001)) (TimeZone 120 True "EET")"2015-10-03T14:55:51.001+02:00"
ToHttpApiData UUIDDefined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData ()Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression toUrlPiece ()"_"
ToHttpApiData a => ToHttpApiData (First a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData a => ToHttpApiData (Last a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData a => ToHttpApiData (Max a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData a => ToHttpApiData (Min a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData a => ToHttpApiData (Identity a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData a => ToHttpApiData (First a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData a => ToHttpApiData (Last a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData a => ToHttpApiData (Dual a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData a => ToHttpApiData (Product a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData a => ToHttpApiData (Sum a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData a => ToHttpApiData (Maybe a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample1 expression toUrlPiece (Just "Hello")"just Hello"
HasResolution a => ToHttpApiData (Fixed a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataNote: this instance is not polykinded
(ToHttpApiData a, ToHttpApiData b) => ToHttpApiData (Either a b)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataExample2 expressions toUrlPiece (Left "err" :: Either String Int)"left err"toUrlPiece (Right 3 :: Either String Int)"right 3"
ToHttpApiData a => ToHttpApiData (Const a b)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataToHttpApiData a => ToHttpApiData (Tagged b a)Defined in http-api-data-0.6.1 · Web.Internal.HttpApiDataNote: this instance is not polykinded
Represents a general universal resource identifier using its component parts.
For example, for the URI
foo://anonymous@www.haskell.org:42/ghc?query#fragthe components are:
Instances12Eq, Data, Ord, Show, Generic, NFData, …
Eq URIDefined in network-uri-2.6.4.2 · Network.URIData URIDefined in network-uri-2.6.4.2 · Network.URIOrd URIDefined in network-uri-2.6.4.2 · Network.URIShow URIDefined in network-uri-2.6.4.2 · Network.URIGeneric URIDefined in network-uri-2.6.4.2 · Network.URINFData URIDefined in network-uri-2.6.4.2 · Network.URIFromJSON URIDefined in aeson-2.2.3.0 · Data.Aeson.Types.FromJSONFromJSONKey URIDefined in aeson-2.2.3.0 · Data.Aeson.Types.FromJSONToJSON URIDefined in aeson-2.2.3.0 · Data.Aeson.Types.ToJSONToJSONKey URIDefined in aeson-2.2.3.0 · Data.Aeson.Types.ToJSONLift URIDefined in network-uri-2.6.4.2 · Network.URItype Rep URI = D1 ('MetaDataDefined in network-uri-2.6.4.2 · Network.URI"URI"
"Network.URI"
"network-uri-2.6.4.2-7IyyRK4Oj6pFyOdiX4bVqe"
'False) (C1 ('MetaCons"URI"
'PrefixI 'True) ((S1 ('MetaSel ('Just"uriScheme"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: S1 ('MetaSel ('Just"uriAuthority"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe URIAuth))) :*: (S1 ('MetaSel ('Just"uriPath"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: (S1 ('MetaSel ('Just"uriQuery"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: S1 ('MetaSel ('Just"uriFragment"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)))))
Instances12EqP, GCompare, GEq, GNFData, GRead, GShow, …
EqP SBoolDefined in singleton-bool-0.1.8 · Data.Singletons.BoolGCompare SBoolDefined in singleton-bool-0.1.8 · Data.Singletons.BoolGEq SBoolDefined in singleton-bool-0.1.8 · Data.Singletons.BoolExample1 expression geq STrue STrueJust Refl
Example1 expression geq STrue SFalseNothing
GNFData SBoolDefined in singleton-bool-0.1.8 · Data.Singletons.BoolGRead SBoolDefined in singleton-bool-0.1.8 · Data.Singletons.BoolExample1 expression readsPrec 0 "Some STrue" :: [(Some SBool, String)][(Some STrue,"")]
Example1 expression readsPrec 0 "Some SFalse" :: [(Some SBool, String)][(Some SFalse,"")]
Example1 expression readsPrec 0 "Some Else" :: [(Some SBool, String)][]
GShow SBoolDefined in singleton-bool-0.1.8 · Data.Singletons.BoolExample1 expression showsPrec 0 STrue """STrue"
OrdP SBoolDefined in singleton-bool-0.1.8 · Data.Singletons.BoolEq (SBool b)Defined in singleton-bool-0.1.8 · Data.Singletons.BoolOrd (SBool b)Defined in singleton-bool-0.1.8 · Data.Singletons.BoolShow (SBool b)Defined in singleton-bool-0.1.8 · Data.Singletons.BoolNFData (SBool b)Defined in singleton-bool-0.1.8 · Data.Singletons.BoolSBoolI b => Boring (SBool b)Defined in singleton-bool-0.1.8 · Data.Singletons.Bool
module Servant.Foreign.Inflections