<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"/><title>Servant.API.QueryParam</title><linkhref="ocean.css"rel="stylesheet"type="text/css"title="Ocean"/><scriptsrc="haddock-util.js"type="text/javascript"></script><scripttype="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();setSynopsis("mini_Servant-API-QueryParam.html");};
</script></head><body><divid="package-header"><ulclass="links"id="page-menu"><li><ahref="src/Servant-API-QueryParam.html">Source</a></li><li><ahref="index.html">Contents</a></li><li><ahref="doc-index.html">Index</a></li></ul><pclass="caption">servant-0.2: A family of combinators for defining webservices APIs and serving them</p></div><divid="content"><divid="module-header"><tableclass="info"><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><pclass="caption">Servant.API.QueryParam</p></div><divid="synopsis"><pid="control.syn"class="caption expander"onclick="toggleSection('syn')">Synopsis</p><ulid="section.syn"class="hide"onclick="toggleSection('syn')"><liclass="src short"><spanclass="keyword">data</span><ahref="#t:QueryParam">QueryParam</a> sym a</li><liclass="src short"><spanclass="keyword">data</span><ahref="#t:QueryParams">QueryParams</a> sym a</li><liclass="src short"><spanclass="keyword">data</span><ahref="#t:QueryFlag">QueryFlag</a> sym</li></ul></div><divid="interface"><h1>Documentation</h1><divclass="top"><pclass="src"><spanclass="keyword">data</span><aname="t:QueryParam"class="def">QueryParam</a> sym a <ahref="src/Servant-API-QueryParam.html#QueryParam"class="link">Source</a></p><divclass="doc"><p>Lookup the value associated to the <code>sym</code> query string parameter
and try to extract it as a value of type <code>a</code>.</p><p>Example:</p><pre>-- /books?author=<author name>
type MyApi = "books" :> QueryParam "author" Text :> Get [Book]</pre></div><divclass="subs instances"><pid="control.i:QueryParam"class="caption collapser"onclick="toggleSection('i:QueryParam')">Instances</p><divid="section.i:QueryParam"class="show"><table><tr><tdclass="src">(<ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:KnownSymbol">KnownSymbol</a> sym, <ahref="Servant-Common-Text.html#t:FromText">FromText</a> a, <ahref="Servant-Server.html#t:HasServer">HasServer</a> sublayout) =><ahref="Servant-Server.html#t:HasServer">HasServer</a> (<ahref="Servant-API-Sub.html#t::-62-">(:>)</a> * (<ahref="Servant-API-QueryParam.html#t:QueryParam">QueryParam</a><ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> * sym a) sublayout)</td><tdclass="doc"><p>If you use <code><code><ahref="Servant-API-QueryParam.html#t:QueryParam">QueryParam</a></code>"author" Text</code> in one of the endpoints for your API,
this automatically requires your server-side handler to be a function
that takes an argument of type <code><code><ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Maybe.html#t:Maybe">Maybe</a></code><code>Text</code></code>.</p><p>This lets servant worry about looking it up in the query string
and turning it into a value of the type you specify, enclosed
in <code><ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Maybe.html#t:Maybe">Maybe</a></code>, because it may not be there and servant would then
hand you <code><ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Maybe.html#v:Nothing">Nothing</a></code>.</p><p>You can control how it'll be converted from <code>Text</code> to your type
by simply providing an instance of <code><ahref="Servant-Common-Text.html#t:FromText">FromText</a></code> for your type.</p><p>Example:</p><pre>type MyApi = "books" :> QueryParam "author" Text :> Get [Book]
server :: Server MyApi
server = getBooksBy
where getBooksBy :: Maybe Text -> EitherT (Int, String) IO [Book]
getBooksBy Nothing = ...return all books...
getBooksBy (Just author) = ...return books by the given author...</pre></td></tr><tr><tdclass="src"><spanclass="keyword">type</span><ahref="Servant-Server.html#t:Server">Server</a> (<ahref="Servant-API-Sub.html#t::-62-">(:>)</a> * (<ahref="Servant-API-QueryParam.html#t:QueryParam">QueryParam</a><ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> * sym a) sublayout) = <ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Maybe.html#t:Maybe">Maybe</a> a -><ahref="Servant-Server.html#t:Server">Server</a> sublayout</td><tdclass="doc empty"> </td></tr></table></div></div></div><divclass="top"><pclass="src"><spanclass="keyword">data</span><aname="t:QueryParams"class="def">QueryParams</a> sym a <ahref="src/Servant-API-QueryParam.html#QueryParams"class="link">Source</a></p><divclass="doc"><p>Lookup the values associated to the <code>sym</code> query string parameter
and try to extract it as a value of type <code>[a]</code>. This is typically
meant to support query string parameters of the form
<code>param[]=val1&param[]=val2</code> and so on. Note that servant doesn't actually
require the <code>[]</code>s and will fetch the values just fine with
type MyApi = "books" :> QueryParams "authors" Text :> Get [Book]</pre></div><divclass="subs instances"><pid="control.i:QueryParams"class="caption collapser"onclick="toggleSection('i:QueryParams')">Instances</p><divid="section.i:QueryParams"class="show"><table><tr><tdclass="src">(<ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:KnownSymbol">KnownSymbol</a> sym, <ahref="Servant-Common-Text.html#t:FromText">FromText</a> a, <ahref="Servant-Server.html#t:HasServer">HasServer</a> sublayout) =><ahref="Servant-Server.html#t:HasServer">HasServer</a> (<ahref="Servant-API-Sub.html#t::-62-">(:>)</a> * (<ahref="Servant-API-QueryParam.html#t:QueryParams">QueryParams</a><ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> * sym a) sublayout)</td><tdclass="doc"><p>If you use <code><code><ahref="Servant-API-QueryParam.html#t:QueryParams">QueryParams</a></code>"authors" Text</code> in one of the endpoints for your API,
this automatically requires your server-side handler to be a function
that takes an argument of type <code>[<code>Text</code>]</code>.</p><p>This lets servant worry about looking up 0 or more values in the query string
associated to <code>authors</code> and turning each of them into a value of
the type you specify.</p><p>You can control how the individual values are converted from <code>Text</code> to your type
by simply providing an instance of <code><ahref="Servant-Common-Text.html#t:FromText">FromText</a></code> for your type.</p><p>Example:</p><pre>type MyApi = "books" :> QueryParams "authors" Text :> Get [Book]
server :: Server MyApi
server = getBooksBy
where getBooksBy :: [Text] -> EitherT (Int, String) IO [Book]
getBooksBy authors = ...return all books by these authors...</pre></td></tr><tr><tdclass="src"><spanclass="keyword">type</span><ahref="Servant-Server.html#t:Server">Server</a> (<ahref="Servant-API-Sub.html#t::-62-">(:>)</a> * (<ahref="Servant-API-QueryParam.html#t:QueryParams">QueryParams</a><ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> * sym a) sublayout) = [a] -><ahref="Servant-Server.html#t:Server">Server</a> sublayout</td><tdclass="doc empty"> </td></tr></table></div></div></div><divclass="top"><pclass="src"><spanclass="keyword">data</span><aname="t:QueryFlag"class="def">QueryFlag</a> sym <ahref="src/Servant-API-QueryParam.html#QueryFlag"class="link">Source</a></p><divclass="doc"><p>Lookup a potentially value-less query string parameter
with boolean semantics. If the param <code>sym</code> is there without any value,
or if it's there with value "true" or "1", it's interpreted as <code><ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Bool.html#v:True">True</a></code>.
Otherwise, it's interpreted as <code><ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Bool.html#v:False">False</a></code>.</p><p>Example:</p><pre>-- /books?published
type MyApi = "books" :> QueryFlag "published" :> Get [Book]</pre></div><divclass="subs instances"><pid="control.i:QueryFlag"class="caption collapser"onclick="toggleSection('i:QueryFlag')">Instances</p><divid="section.i:QueryFlag"class="show"><table><tr><tdclass="src">(<ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:KnownSymbol">KnownSymbol</a> sym, <ahref="Servant-Server.html#t:HasServer">HasServer</a> sublayout) =><ahref="Servant-Server.html#t:HasServer">HasServer</a> (<ahref="Servant-API-Sub.html#t::-62-">(:>)</a> * (<ahref="Servant-API-QueryParam.html#t:QueryFlag">QueryFlag</a><ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> sym) sublayout)</td><tdclass="doc"><p>If you use <code><code><ahref="Servant-API-QueryParam.html#t:QueryFlag">QueryFlag</a></code>"published"</code> in one of the endpoints for your API,
this automatically requires your server-side handler to be a function
that takes an argument of type <code><ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Bool.html#t:Bool">Bool</a></code>.</p><p>Example:</p><pre>type MyApi = "books" :> QueryFlag "published" :> Get [Book]
server :: Server MyApi
server = getBooks
where getBooks :: Bool -> EitherT (Int, String) IO [Book]
getBooks onlyPublished = ...return all books, or only the ones that are already published, depending on the argument...</pre></td></tr><tr><tdclass="src"><spanclass="keyword">type</span><ahref="Servant-Server.html#t:Server">Server</a> (<ahref="Servant-API-Sub.html#t::-62-">(:>)</a> * (<ahref="Servant-API-QueryParam.html#t:QueryFlag">QueryFlag</a><ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> sym) sublayout) = <ahref="https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Bool.html#t:Bool">Bool</a> -><ahref="Servant-Server.html#t:Server">Server</a> sublayout</td><tdclass="doc empty"> </td></tr></table></div></div></div></div></div><divid="footer"><p>Produced by <ahref="http://www.haskell.org/haddock/">Haddock</a> version 2.15.0</p></div></body></html>