git.iko.soy/typeable/servant
on master help sign in
Built from 501dafaeba353167bd5d3b7a4877a756878bf7ef
commit2c30a11e0a8ec78b38b6425b5a7f786e39fbec0f authorAlp Mestanogullari <alpmestan@gmail.com> dateMon 8 Dec 2014, 12:28 (12 years ago) parent63563ca
12 files changed+209−47
Servant-API-Header.html+21 Servant-API-Sub.html+15−2 Servant-API.html+1−1 Servant-Server.html+14−1 doc-index.html+1−1 index-frames.html+1−1 index.html+1−1 mini_Servant-API-Header.html+4 servant.haddock servant.txt+39 src/Servant-API-Header.html+69 src/Servant-API.html+43−40
Servant-API-Header.htmlnew file+21
@@ -0,0 +1,21 @@
1+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Servant.API.Header</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
2+window.onload = function () {pageLoad();setSynopsis("mini_Servant-API-Header.html");};
3+//]]>
4+</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Servant-API-Header.html">Source</a></li><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">servant-0.2: A family of combinators for defining webservices APIs and serving them</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Servant.API.Header</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">data</span> <a href="#t:Header">Header</a> sym a</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Header" class="def">Header</a> sym a <a href="src/Servant-API-Header.html#Header" class="link">Source</a></p><div class="doc"><p>Extract the given header's value as a value of type <code>a</code>.</p><p>Example:</p><pre>newtype Referer = Referer Text
5+ deriving (Eq, Show, FromText, ToText)
6+
7+ -- GET /view-my-referer
8+type MyApi = &quot;view-my-referer&quot; :&gt; Header &quot;from&quot; Referer :&gt; Get Referer</pre></div><div class="subs instances"><p id="control.i:Header" class="caption collapser" onclick="toggleSection('i:Header')">Instances</p><div id="section.i:Header" class="show"><table><tr><td class="src">(<a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:KnownSymbol">KnownSymbol</a> sym, <a href="Servant-Common-Text.html#t:FromText">FromText</a> a, <a href="Servant-Server.html#t:HasServer">HasServer</a> sublayout) =&gt; <a href="Servant-Server.html#t:HasServer">HasServer</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-Header.html#t:Header">Header</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> * sym a) sublayout)</td><td class="doc"><p>If you use <code><a href="Servant-API-Header.html#t:Header">Header</a></code> in one of the endpoints for your API,
9+ this automatically requires your server-side handler to be a function
10+ that takes an argument of the type specified by <code><a href="Servant-API-Header.html#t:Header">Header</a></code>.
11+ This lets servant worry about extracting it from the request and turning
12+ it into a value of the type you specify.</p><p>All it asks is for a <code><a href="Servant-Common-Text.html#t:FromText">FromText</a></code> instance.</p><p>Example:</p><pre>newtype Referer = Referer Text
13+ deriving (Eq, Show, FromText, ToText)
14+
15+ -- GET /view-my-referer
16+type MyApi = &quot;view-my-referer&quot; :&gt; Header &quot;Referer&quot; Referer :&gt; Get Referer
17+
18+server :: Server MyApi
19+server = viewReferer
20+ where viewReferer :: Referer -&gt; EitherT (Int, String) IO referer
21+ viewReferer referer = return referer</pre></td></tr><tr><td class="src"><span class="keyword">type</span> <a href="Servant-Server.html#t:Server">Server</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-Header.html#t:Header">Header</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> * sym a) sublayout) = <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Maybe.html#t:Maybe">Maybe</a> a -&gt; <a href="Servant-Server.html#t:Server">Server</a> sublayout</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.15.0</p></div></body></html>
Servant-API-Sub.html+15−2
@@ -14,7 +14,20 @@ type MyApi = &quot;hello&quot; :&gt; &quot;world&quot; :&gt; Get World</pre></di
1414server :: Server MyApi
1515server = getBook
1616 where getBook :: Text -&gt; EitherT (Int, String) IO Book
17− getBook isbn = ...</pre></td></tr><tr><td class="src">(<a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:KnownSymbol">KnownSymbol</a> sym, <a href="Servant-Server.html#t:HasServer">HasServer</a> sublayout) =&gt; <a href="Servant-Server.html#t:HasServer">HasServer</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-QueryParam.html#t:QueryFlag">QueryFlag</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> sym) sublayout)</td><td class="doc"><p>If you use <code><code><a href="Servant-API-QueryParam.html#t:QueryFlag">QueryFlag</a></code> &quot;published&quot;</code> in one of the endpoints for your API,
17+ getBook isbn = ...</pre></td></tr><tr><td class="src">(<a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:KnownSymbol">KnownSymbol</a> sym, <a href="Servant-Common-Text.html#t:FromText">FromText</a> a, <a href="Servant-Server.html#t:HasServer">HasServer</a> sublayout) =&gt; <a href="Servant-Server.html#t:HasServer">HasServer</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-Header.html#t:Header">Header</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> * sym a) sublayout)</td><td class="doc"><p>If you use <code><a href="Servant-API-Header.html#t:Header">Header</a></code> in one of the endpoints for your API,
18+ this automatically requires your server-side handler to be a function
19+ that takes an argument of the type specified by <code><a href="Servant-API-Header.html#t:Header">Header</a></code>.
20+ This lets servant worry about extracting it from the request and turning
21+ it into a value of the type you specify.</p><p>All it asks is for a <code><a href="Servant-Common-Text.html#t:FromText">FromText</a></code> instance.</p><p>Example:</p><pre>newtype Referer = Referer Text
22+ deriving (Eq, Show, FromText, ToText)
23+
24+ -- GET /view-my-referer
25+type MyApi = &quot;view-my-referer&quot; :&gt; Header &quot;Referer&quot; Referer :&gt; Get Referer
26+
27+server :: Server MyApi
28+server = viewReferer
29+ where viewReferer :: Referer -&gt; EitherT (Int, String) IO referer
30+ viewReferer referer = return referer</pre></td></tr><tr><td class="src">(<a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:KnownSymbol">KnownSymbol</a> sym, <a href="Servant-Server.html#t:HasServer">HasServer</a> sublayout) =&gt; <a href="Servant-Server.html#t:HasServer">HasServer</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-QueryParam.html#t:QueryFlag">QueryFlag</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> sym) sublayout)</td><td class="doc"><p>If you use <code><code><a href="Servant-API-QueryParam.html#t:QueryFlag">QueryFlag</a></code> &quot;published&quot;</code> in one of the endpoints for your API,
1831 this automatically requires your server-side handler to be a function
1932 that takes an argument of type <code><a href="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 = &quot;books&quot; :&gt; QueryFlag &quot;published&quot; :&gt; Get [Book]
2033
@@ -53,4 +66,4 @@ server :: Server MyApi
5366server = postBook
5467 where postBook :: Book -&gt; EitherT (Int, String) IO Book
5568 postBook book = ...insert into your db...</pre></td></tr><tr><td class="src">(<a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:KnownSymbol">KnownSymbol</a> path, <a href="Servant-Server.html#t:HasServer">HasServer</a> sublayout) =&gt; <a href="Servant-Server.html#t:HasServer">HasServer</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> path sublayout)</td><td class="doc"><p>Make sure the incoming request starts with <code>&quot;/path&quot;</code>, strip it and
56− pass the rest of the request path to <code>sublayout</code>.</p></td></tr><tr><td class="src"><span class="keyword">type</span> <a href="Servant-Server.html#t:Server">Server</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-Capture.html#t:Capture">Capture</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> * capture a) sublayout) = a -&gt; <a href="Servant-Server.html#t:Server">Server</a> sublayout</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><span class="keyword">type</span> <a href="Servant-Server.html#t:Server">Server</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-QueryParam.html#t:QueryFlag">QueryFlag</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> sym) sublayout) = <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Bool.html#t:Bool">Bool</a> -&gt; <a href="Servant-Server.html#t:Server">Server</a> sublayout</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><span class="keyword">type</span> <a href="Servant-Server.html#t:Server">Server</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-QueryParam.html#t:QueryParams">QueryParams</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> * sym a) sublayout) = [a] -&gt; <a href="Servant-Server.html#t:Server">Server</a> sublayout</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><span class="keyword">type</span> <a href="Servant-Server.html#t:Server">Server</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-QueryParam.html#t:QueryParam">QueryParam</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> * sym a) sublayout) = <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Maybe.html#t:Maybe">Maybe</a> a -&gt; <a href="Servant-Server.html#t:Server">Server</a> sublayout</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><span class="keyword">type</span> <a href="Servant-Server.html#t:Server">Server</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-ReqBody.html#t:ReqBody">ReqBody</a> * a) sublayout) = a -&gt; <a href="Servant-Server.html#t:Server">Server</a> sublayout</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><span class="keyword">type</span> <a href="Servant-Server.html#t:Server">Server</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> path sublayout) = <a href="Servant-Server.html#t:Server">Server</a> sublayout</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.15.0</p></div></body></html>
69+ pass the rest of the request path to <code>sublayout</code>.</p></td></tr><tr><td class="src"><span class="keyword">type</span> <a href="Servant-Server.html#t:Server">Server</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-Capture.html#t:Capture">Capture</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> * capture a) sublayout) = a -&gt; <a href="Servant-Server.html#t:Server">Server</a> sublayout</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><span class="keyword">type</span> <a href="Servant-Server.html#t:Server">Server</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-Header.html#t:Header">Header</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> * sym a) sublayout) = <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Maybe.html#t:Maybe">Maybe</a> a -&gt; <a href="Servant-Server.html#t:Server">Server</a> sublayout</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><span class="keyword">type</span> <a href="Servant-Server.html#t:Server">Server</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-QueryParam.html#t:QueryFlag">QueryFlag</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> sym) sublayout) = <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Bool.html#t:Bool">Bool</a> -&gt; <a href="Servant-Server.html#t:Server">Server</a> sublayout</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><span class="keyword">type</span> <a href="Servant-Server.html#t:Server">Server</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-QueryParam.html#t:QueryParams">QueryParams</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> * sym a) sublayout) = [a] -&gt; <a href="Servant-Server.html#t:Server">Server</a> sublayout</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><span class="keyword">type</span> <a href="Servant-Server.html#t:Server">Server</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-QueryParam.html#t:QueryParam">QueryParam</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> * sym a) sublayout) = <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Maybe.html#t:Maybe">Maybe</a> a -&gt; <a href="Servant-Server.html#t:Server">Server</a> sublayout</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><span class="keyword">type</span> <a href="Servant-Server.html#t:Server">Server</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-ReqBody.html#t:ReqBody">ReqBody</a> * a) sublayout) = a -&gt; <a href="Servant-Server.html#t:Server">Server</a> sublayout</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><span class="keyword">type</span> <a href="Servant-Server.html#t:Server">Server</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> path sublayout) = <a href="Servant-Server.html#t:Server">Server</a> sublayout</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.15.0</p></div></body></html>
Servant-API.html+1−1
@@ -1,4 +1,4 @@
11<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Servant.API</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
22window.onload = function () {pageLoad();setSynopsis("mini_Servant-API.html");};
33//]]>
4−</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Servant-API.html">Source</a></li><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">servant-0.2: A family of combinators for defining webservices APIs and serving them</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Servant.API</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Combinators</a></li><li><a href="#g:2">Accessing information from the request</a></li><li><a href="#g:3">Actual endpoints, distinguished by HTTP method</a></li><li><a href="#g:4">Untyped endpoints</a></li><li><a href="#g:5">Utilities</a></li></ul></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short">module <a href="Servant-API-Sub.html">Servant.API.Sub</a></li><li class="src short">module <a href="Servant-API-Alternative.html">Servant.API.Alternative</a></li><li class="src short">module <a href="Servant-API-Capture.html">Servant.API.Capture</a></li><li class="src short">module <a href="Servant-API-QueryParam.html">Servant.API.QueryParam</a></li><li class="src short">module <a href="Servant-API-ReqBody.html">Servant.API.ReqBody</a></li><li class="src short">module <a href="Servant-API-Get.html">Servant.API.Get</a></li><li class="src short">module <a href="Servant-API-Post.html">Servant.API.Post</a></li><li class="src short">module <a href="Servant-API-Delete.html">Servant.API.Delete</a></li><li class="src short">module <a href="Servant-API-Put.html">Servant.API.Put</a></li><li class="src short">module <a href="Servant-API-Raw.html">Servant.API.Raw</a></li><li class="src short">module <a href="Servant-Utils-StaticFiles.html">Servant.Utils.StaticFiles</a></li><li class="src short">module <a href="Servant-QQ.html">Servant.QQ</a></li><li class="src short">module <a href="Servant-Utils-Links.html">Servant.Utils.Links</a></li></ul></div><div id="interface"><h1 id="g:1">Combinators</h1><div class="doc"><p>Type-level combinator for expressing subrouting: <code><code><a href="Servant-API-Sub.html#t::-62-">:&gt;</a></code></code></p></div><div class="top"><p class="src">module <a href="Servant-API-Sub.html">Servant.API.Sub</a></p></div><div class="doc"><p>Type-level combinator for alternative endpoints: <code><code><a href="Servant-API-Alternative.html#t::-60--124--62-">:&lt;|&gt;</a></code></code></p></div><div class="top"><p class="src">module <a href="Servant-API-Alternative.html">Servant.API.Alternative</a></p></div><h1 id="g:2">Accessing information from the request</h1><div class="doc"><p>Capturing parts of the url path as parsed values: <code><code><a href="Servant-API-Capture.html#t:Capture">Capture</a></code></code></p></div><div class="top"><p class="src">module <a href="Servant-API-Capture.html">Servant.API.Capture</a></p></div><div class="doc"><p>Retrieving parameters from the query string of the <code>URI</code>: <code><code><a href="Servant-API-QueryParam.html#t:QueryParam">QueryParam</a></code></code></p></div><div class="top"><p class="src">module <a href="Servant-API-QueryParam.html">Servant.API.QueryParam</a></p></div><div class="doc"><p>Accessing the request body as a JSON-encoded type: <code><code><a href="Servant-API-ReqBody.html#t:ReqBody">ReqBody</a></code></code></p></div><div class="top"><p class="src">module <a href="Servant-API-ReqBody.html">Servant.API.ReqBody</a></p></div><h1 id="g:3">Actual endpoints, distinguished by HTTP method</h1><div class="doc"><p>GET requests</p></div><div class="top"><p class="src">module <a href="Servant-API-Get.html">Servant.API.Get</a></p></div><div class="doc"><p>POST requests</p></div><div class="top"><p class="src">module <a href="Servant-API-Post.html">Servant.API.Post</a></p></div><div class="doc"><p>DELETE requests</p></div><div class="top"><p class="src">module <a href="Servant-API-Delete.html">Servant.API.Delete</a></p></div><div class="doc"><p>PUT requests</p></div><div class="top"><p class="src">module <a href="Servant-API-Put.html">Servant.API.Put</a></p></div><h1 id="g:4">Untyped endpoints</h1><div class="doc"><p>Plugging in a wai <code><a href="https://hackage.haskell.org/package/wai-3.0.2/docs/Network-Wai.html#t:Application">Application</a></code>, serving directories</p></div><div class="top"><p class="src">module <a href="Servant-API-Raw.html">Servant.API.Raw</a></p></div><div class="top"><p class="src">module <a href="Servant-Utils-StaticFiles.html">Servant.Utils.StaticFiles</a></p></div><h1 id="g:5">Utilities</h1><div class="doc"><p>QuasiQuotes for endpoints</p></div><div class="top"><p class="src">module <a href="Servant-QQ.html">Servant.QQ</a></p></div><div class="doc"><p>Type-safe internal URLs</p></div><div class="top"><p class="src">module <a href="Servant-Utils-Links.html">Servant.Utils.Links</a></p></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.15.0</p></div></body></html>
4+</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Servant-API.html">Source</a></li><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">servant-0.2: A family of combinators for defining webservices APIs and serving them</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Servant.API</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Combinators</a></li><li><a href="#g:2">Accessing information from the request</a></li><li><a href="#g:3">Actual endpoints, distinguished by HTTP method</a></li><li><a href="#g:4">Untyped endpoints</a></li><li><a href="#g:5">Utilities</a></li></ul></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short">module <a href="Servant-API-Sub.html">Servant.API.Sub</a></li><li class="src short">module <a href="Servant-API-Alternative.html">Servant.API.Alternative</a></li><li class="src short">module <a href="Servant-API-Capture.html">Servant.API.Capture</a></li><li class="src short">module <a href="Servant-API-Header.html">Servant.API.Header</a></li><li class="src short">module <a href="Servant-API-QueryParam.html">Servant.API.QueryParam</a></li><li class="src short">module <a href="Servant-API-ReqBody.html">Servant.API.ReqBody</a></li><li class="src short">module <a href="Servant-API-Get.html">Servant.API.Get</a></li><li class="src short">module <a href="Servant-API-Post.html">Servant.API.Post</a></li><li class="src short">module <a href="Servant-API-Delete.html">Servant.API.Delete</a></li><li class="src short">module <a href="Servant-API-Put.html">Servant.API.Put</a></li><li class="src short">module <a href="Servant-API-Raw.html">Servant.API.Raw</a></li><li class="src short">module <a href="Servant-Utils-StaticFiles.html">Servant.Utils.StaticFiles</a></li><li class="src short">module <a href="Servant-QQ.html">Servant.QQ</a></li><li class="src short">module <a href="Servant-Utils-Links.html">Servant.Utils.Links</a></li></ul></div><div id="interface"><h1 id="g:1">Combinators</h1><div class="doc"><p>Type-level combinator for expressing subrouting: <code><code><a href="Servant-API-Sub.html#t::-62-">:&gt;</a></code></code></p></div><div class="top"><p class="src">module <a href="Servant-API-Sub.html">Servant.API.Sub</a></p></div><div class="doc"><p>Type-level combinator for alternative endpoints: <code><code><a href="Servant-API-Alternative.html#t::-60--124--62-">:&lt;|&gt;</a></code></code></p></div><div class="top"><p class="src">module <a href="Servant-API-Alternative.html">Servant.API.Alternative</a></p></div><h1 id="g:2">Accessing information from the request</h1><div class="doc"><p>Capturing parts of the url path as parsed values: <code><code><a href="Servant-API-Capture.html#t:Capture">Capture</a></code></code></p></div><div class="top"><p class="src">module <a href="Servant-API-Capture.html">Servant.API.Capture</a></p></div><div class="doc"><p>Retrieving specific headers from the request</p></div><div class="top"><p class="src">module <a href="Servant-API-Header.html">Servant.API.Header</a></p></div><div class="doc"><p>Retrieving parameters from the query string of the <code>URI</code>: <code><code><a href="Servant-API-QueryParam.html#t:QueryParam">QueryParam</a></code></code></p></div><div class="top"><p class="src">module <a href="Servant-API-QueryParam.html">Servant.API.QueryParam</a></p></div><div class="doc"><p>Accessing the request body as a JSON-encoded type: <code><code><a href="Servant-API-ReqBody.html#t:ReqBody">ReqBody</a></code></code></p></div><div class="top"><p class="src">module <a href="Servant-API-ReqBody.html">Servant.API.ReqBody</a></p></div><h1 id="g:3">Actual endpoints, distinguished by HTTP method</h1><div class="doc"><p>GET requests</p></div><div class="top"><p class="src">module <a href="Servant-API-Get.html">Servant.API.Get</a></p></div><div class="doc"><p>POST requests</p></div><div class="top"><p class="src">module <a href="Servant-API-Post.html">Servant.API.Post</a></p></div><div class="doc"><p>DELETE requests</p></div><div class="top"><p class="src">module <a href="Servant-API-Delete.html">Servant.API.Delete</a></p></div><div class="doc"><p>PUT requests</p></div><div class="top"><p class="src">module <a href="Servant-API-Put.html">Servant.API.Put</a></p></div><h1 id="g:4">Untyped endpoints</h1><div class="doc"><p>Plugging in a wai <code><a href="https://hackage.haskell.org/package/wai-3.0.2/docs/Network-Wai.html#t:Application">Application</a></code>, serving directories</p></div><div class="top"><p class="src">module <a href="Servant-API-Raw.html">Servant.API.Raw</a></p></div><div class="top"><p class="src">module <a href="Servant-Utils-StaticFiles.html">Servant.Utils.StaticFiles</a></p></div><h1 id="g:5">Utilities</h1><div class="doc"><p>QuasiQuotes for endpoints</p></div><div class="top"><p class="src">module <a href="Servant-QQ.html">Servant.QQ</a></p></div><div class="doc"><p>Type-safe internal URLs</p></div><div class="top"><p class="src">module <a href="Servant-Utils-Links.html">Servant.Utils.Links</a></p></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.15.0</p></div></body></html>
Servant-Server.html+14−1
@@ -74,7 +74,20 @@ server = listAllBooks :&lt;|&gt; postBook
7474server :: Server MyApi
7575server = getBook
7676 where getBook :: Text -&gt; EitherT (Int, String) IO Book
77− getBook isbn = ...</pre></td></tr><tr><td class="src">(<a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:KnownSymbol">KnownSymbol</a> sym, <a href="Servant-Server.html#t:HasServer">HasServer</a> sublayout) =&gt; <a href="Servant-Server.html#t:HasServer">HasServer</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-QueryParam.html#t:QueryFlag">QueryFlag</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> sym) sublayout)</td><td class="doc"><p>If you use <code><code><a href="Servant-API-QueryParam.html#t:QueryFlag">QueryFlag</a></code> &quot;published&quot;</code> in one of the endpoints for your API,
77+ getBook isbn = ...</pre></td></tr><tr><td class="src">(<a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:KnownSymbol">KnownSymbol</a> sym, <a href="Servant-Common-Text.html#t:FromText">FromText</a> a, <a href="Servant-Server.html#t:HasServer">HasServer</a> sublayout) =&gt; <a href="Servant-Server.html#t:HasServer">HasServer</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-Header.html#t:Header">Header</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> * sym a) sublayout)</td><td class="doc"><p>If you use <code><a href="Servant-API-Header.html#t:Header">Header</a></code> in one of the endpoints for your API,
78+ this automatically requires your server-side handler to be a function
79+ that takes an argument of the type specified by <code><a href="Servant-API-Header.html#t:Header">Header</a></code>.
80+ This lets servant worry about extracting it from the request and turning
81+ it into a value of the type you specify.</p><p>All it asks is for a <code><a href="Servant-Common-Text.html#t:FromText">FromText</a></code> instance.</p><p>Example:</p><pre>newtype Referer = Referer Text
82+ deriving (Eq, Show, FromText, ToText)
83+
84+ -- GET /view-my-referer
85+type MyApi = &quot;view-my-referer&quot; :&gt; Header &quot;Referer&quot; Referer :&gt; Get Referer
86+
87+server :: Server MyApi
88+server = viewReferer
89+ where viewReferer :: Referer -&gt; EitherT (Int, String) IO referer
90+ viewReferer referer = return referer</pre></td></tr><tr><td class="src">(<a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:KnownSymbol">KnownSymbol</a> sym, <a href="Servant-Server.html#t:HasServer">HasServer</a> sublayout) =&gt; <a href="Servant-Server.html#t:HasServer">HasServer</a> (<a href="Servant-API-Sub.html#t::-62-">(:&gt;)</a> * (<a href="Servant-API-QueryParam.html#t:QueryFlag">QueryFlag</a> <a href="https://hackage.haskell.org/package/base-4.7.0.1/docs/GHC-TypeLits.html#t:Symbol">Symbol</a> sym) sublayout)</td><td class="doc"><p>If you use <code><code><a href="Servant-API-QueryParam.html#t:QueryFlag">QueryFlag</a></code> &quot;published&quot;</code> in one of the endpoints for your API,
7891 this automatically requires your server-side handler to be a function
7992 that takes an argument of type <code><a href="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 = &quot;books&quot; :&gt; QueryFlag &quot;published&quot; :&gt; Get [Book]
8093
doc-index.html+1−1
@@ -1,4 +1,4 @@
11<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>servant-0.2: A family of combinators for defining webservices APIs and serving them (Index)</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
22window.onload = function () {pageLoad();};
33//]]>
4−</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">servant-0.2: A family of combinators for defining webservices APIs and serving them</p></div><div id="content"><div id="index"><p class="caption">Index</p><table><tr><td class="src">:&lt;|&gt;</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Servant-API-Alternative.html#t::-60--124--62-">Servant.API.Alternative</a>, Servant.API, Servant</td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Servant-API-Alternative.html#v::-60--124--62-">Servant.API.Alternative</a>, Servant.API, Servant</td></tr><tr><td class="src">:&gt;</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Servant-API-Sub.html#t::-62-">Servant.API.Sub</a>, Servant.API, Servant</td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Servant-API-Sub.html#v::-62-">Servant.API.Sub</a>, Servant.API, Servant</td></tr><tr><td class="src">&gt;:</td><td class="module"><a href="Servant-QQ.html#v:-62-:">Servant.QQ</a>, Servant</td></tr><tr><td class="src">And</td><td class="module"><a href="Servant-Utils-Links.html#t:And">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">blockComment</td><td class="module"><a href="Servant-QQ.html#v:blockComment">Servant.QQ</a>, Servant</td></tr><tr><td class="src">Capture</td><td class="module"><a href="Servant-API-Capture.html#t:Capture">Servant.API.Capture</a>, Servant.API, Servant</td></tr><tr><td class="src">capture</td><td class="module"><a href="Servant-QQ.html#v:capture">Servant.QQ</a>, Servant</td></tr><tr><td class="src">conj</td><td class="module"><a href="Servant-QQ.html#v:conj">Servant.QQ</a>, Servant</td></tr><tr><td class="src">Delete</td><td class="module"><a href="Servant-API-Delete.html#t:Delete">Servant.API.Delete</a>, Servant.API, Servant</td></tr><tr><td class="src">delete</td><td class="module"><a href="Servant-QQ.html#v:delete">Servant.QQ</a>, Servant</td></tr><tr><td class="src">eol</td><td class="module"><a href="Servant-QQ.html#v:eol">Servant.QQ</a>, Servant</td></tr><tr><td class="src">eols</td><td class="module"><a href="Servant-QQ.html#v:eols">Servant.QQ</a>, Servant</td></tr><tr><td class="src">ExpSYM</td><td class="module"><a href="Servant-QQ.html#t:ExpSYM">Servant.QQ</a>, Servant</td></tr><tr><td class="src">failWith</td><td class="module"><a href="Servant-Server.html#v:failWith">Servant.Server</a>, Servant</td></tr><tr><td class="src">FromText</td><td class="module"><a href="Servant-Common-Text.html#t:FromText">Servant.Common.Text</a>, Servant</td></tr><tr><td class="src">fromText</td><td class="module"><a href="Servant-Common-Text.html#v:fromText">Servant.Common.Text</a>, Servant</td></tr><tr><td class="src">Get</td><td class="module"><a href="Servant-API-Get.html#t:Get">Servant.API.Get</a>, Servant.API, Servant</td></tr><tr><td class="src">get</td><td class="module"><a href="Servant-QQ.html#v:get">Servant.QQ</a>, Servant</td></tr><tr><td class="src">HasServer</td><td class="module"><a href="Servant-Server.html#t:HasServer">Servant.Server</a>, Servant</td></tr><tr><td class="src">inlineComment</td><td class="module"><a href="Servant-QQ.html#v:inlineComment">Servant.QQ</a>, Servant</td></tr><tr><td class="src">InvalidBody</td><td class="module"><a href="Servant-Server.html#v:InvalidBody">Servant.Server</a>, Servant</td></tr><tr><td class="src">IsElem</td><td class="module"><a href="Servant-Utils-Links.html#t:IsElem">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">IsLink</td><td class="module"><a href="Servant-Utils-Links.html#t:IsLink">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">IsLink'</td><td class="module"><a href="Servant-Utils-Links.html#t:IsLink-39-">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">IsLink''</td><td class="module"><a href="Servant-Utils-Links.html#t:IsLink-39--39-">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">isMismatch</td><td class="module"><a href="Servant-Server.html#v:isMismatch">Servant.Server</a>, Servant</td></tr><tr><td class="src">Link</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Servant-Utils-Links.html#t:Link">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Servant-Utils-Links.html#v:Link">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">lit</td><td class="module"><a href="Servant-QQ.html#v:lit">Servant.QQ</a>, Servant</td></tr><tr><td class="src">mkLink</td><td class="module"><a href="Servant-Utils-Links.html#v:mkLink">Servant.Utils.Links</a>, Servant.API, Servant</td></tr><tr><td class="src">NotFound</td><td class="module"><a href="Servant-Server.html#v:NotFound">Servant.Server</a>, Servant</td></tr><tr><td class="src">Or</td><td class="module"><a href="Servant-Utils-Links.html#t:Or">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">parseAll</td><td class="module"><a href="Servant-QQ.html#v:parseAll">Servant.QQ</a>, Servant</td></tr><tr><td class="src">parseEntry</td><td class="module"><a href="Servant-QQ.html#v:parseEntry">Servant.QQ</a>, Servant</td></tr><tr><td class="src">parseMethod</td><td class="module"><a href="Servant-QQ.html#v:parseMethod">Servant.QQ</a>, Servant</td></tr><tr><td class="src">parseTyp</td><td class="module"><a href="Servant-QQ.html#v:parseTyp">Servant.QQ</a>, Servant</td></tr><tr><td class="src">parseUrl</td><td class="module"><a href="Servant-QQ.html#v:parseUrl">Servant.QQ</a>, Servant</td></tr><tr><td class="src">parseUrlSegment</td><td class="module"><a href="Servant-QQ.html#v:parseUrlSegment">Servant.QQ</a>, Servant</td></tr><tr><td class="src">Post</td><td class="module"><a href="Servant-API-Post.html#t:Post">Servant.API.Post</a>, Servant.API, Servant</td></tr><tr><td class="src">post</td><td class="module"><a href="Servant-QQ.html#v:post">Servant.QQ</a>, Servant</td></tr><tr><td class="src">Proxy</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Data Constructor)</td><td class="module"><a href="Servant.html#v:Proxy">Servant</a></td></tr><tr><td class="alt">2 (Type/Class)</td><td class="module"><a href="Servant.html#t:Proxy">Servant</a></td></tr><tr><td class="src">Put</td><td class="module"><a href="Servant-API-Put.html#t:Put">Servant.API.Put</a>, Servant.API, Servant</td></tr><tr><td class="src">put</td><td class="module"><a href="Servant-QQ.html#v:put">Servant.QQ</a>, Servant</td></tr><tr><td class="src">QueryFlag</td><td class="module"><a href="Servant-API-QueryParam.html#t:QueryFlag">Servant.API.QueryParam</a>, Servant.API, Servant</td></tr><tr><td class="src">QueryParam</td><td class="module"><a href="Servant-API-QueryParam.html#t:QueryParam">Servant.API.QueryParam</a>, Servant.API, Servant</td></tr><tr><td class="src">queryParam</td><td class="module"><a href="Servant-QQ.html#v:queryParam">Servant.QQ</a>, Servant</td></tr><tr><td class="src">QueryParams</td><td class="module"><a href="Servant-API-QueryParam.html#t:QueryParams">Servant.API.QueryParam</a>, Servant.API, Servant</td></tr><tr><td class="src">Raw</td><td class="module"><a href="Servant-API-Raw.html#t:Raw">Servant.API.Raw</a>, Servant.API, Servant</td></tr><tr><td class="src">ReqArgVal</td><td class="module"><a href="Servant-QQ.html#v:ReqArgVal">Servant.QQ</a>, Servant</td></tr><tr><td class="src">ReqBody</td><td class="module"><a href="Servant-API-ReqBody.html#t:ReqBody">Servant.API.ReqBody</a>, Servant.API, Servant</td></tr><tr><td class="src">reqBody</td><td class="module"><a href="Servant-QQ.html#v:reqBody">Servant.QQ</a>, Servant</td></tr><tr><td class="src">route</td><td class="module"><a href="Servant-Server.html#v:route">Servant.Server</a>, Servant</td></tr><tr><td class="src">RouteMismatch</td><td class="module"><a href="Servant-Server.html#t:RouteMismatch">Servant.Server</a>, Servant</td></tr><tr><td class="src">RouteResult</td><td class="module"><a href="Servant-Server.html#t:RouteResult">Servant.Server</a>, Servant</td></tr><tr><td class="src">routeResult</td><td class="module"><a href="Servant-Server.html#v:routeResult">Servant.Server</a>, Servant</td></tr><tr><td class="src">RoutingApplication</td><td class="module"><a href="Servant-Server.html#t:RoutingApplication">Servant.Server</a>, Servant</td></tr><tr><td class="src">RR</td><td class="module"><a href="Servant-Server.html#v:RR">Servant.Server</a>, Servant</td></tr><tr><td class="src">serve</td><td class="module"><a href="Servant-Server.html#v:serve">Servant.Server</a>, Servant</td></tr><tr><td class="src">serveDirectory</td><td class="module"><a href="Servant-Utils-StaticFiles.html#v:serveDirectory">Servant.Utils.StaticFiles</a>, Servant.API, Servant</td></tr><tr><td class="src">Server</td><td class="module"><a href="Servant-Server.html#t:Server">Servant.Server</a>, Servant</td></tr><tr><td class="src">sitemap</td><td class="module"><a href="Servant-QQ.html#v:sitemap">Servant.QQ</a>, Servant.API, Servant</td></tr><tr><td class="src">succeedWith</td><td class="module"><a href="Servant-Server.html#v:succeedWith">Servant.Server</a>, Servant</td></tr><tr><td class="src">toApplication</td><td class="module"><a href="Servant-Server.html#v:toApplication">Servant.Server</a>, Servant</td></tr><tr><td class="src">ToText</td><td class="module"><a href="Servant-Common-Text.html#t:ToText">Servant.Common.Text</a>, Servant</td></tr><tr><td class="src">toText</td><td class="module"><a href="Servant-Common-Text.html#v:toText">Servant.Common.Text</a>, Servant</td></tr><tr><td class="src">Typ</td><td class="module"><a href="Servant-QQ.html#t:Typ">Servant.QQ</a>, Servant</td></tr><tr><td class="src">Val</td><td class="module"><a href="Servant-QQ.html#v:Val">Servant.QQ</a>, Servant</td></tr><tr><td class="src">ValidLinkIn</td><td class="module"><a href="Servant-Utils-Links.html#t:ValidLinkIn">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">vlh</td><td class="module"><a href="Servant-Utils-Links.html#v:vlh">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">VLinkHelper</td><td class="module"><a href="Servant-Utils-Links.html#t:VLinkHelper">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">WrongMethod</td><td class="module"><a href="Servant-Server.html#v:WrongMethod">Servant.Server</a>, Servant</td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.15.0</p></div></body></html>
4+</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">servant-0.2: A family of combinators for defining webservices APIs and serving them</p></div><div id="content"><div id="index"><p class="caption">Index</p><table><tr><td class="src">:&lt;|&gt;</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Servant-API-Alternative.html#t::-60--124--62-">Servant.API.Alternative</a>, Servant.API, Servant</td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Servant-API-Alternative.html#v::-60--124--62-">Servant.API.Alternative</a>, Servant.API, Servant</td></tr><tr><td class="src">:&gt;</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Servant-API-Sub.html#t::-62-">Servant.API.Sub</a>, Servant.API, Servant</td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Servant-API-Sub.html#v::-62-">Servant.API.Sub</a>, Servant.API, Servant</td></tr><tr><td class="src">&gt;:</td><td class="module"><a href="Servant-QQ.html#v:-62-:">Servant.QQ</a>, Servant</td></tr><tr><td class="src">And</td><td class="module"><a href="Servant-Utils-Links.html#t:And">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">blockComment</td><td class="module"><a href="Servant-QQ.html#v:blockComment">Servant.QQ</a>, Servant</td></tr><tr><td class="src">Capture</td><td class="module"><a href="Servant-API-Capture.html#t:Capture">Servant.API.Capture</a>, Servant.API, Servant</td></tr><tr><td class="src">capture</td><td class="module"><a href="Servant-QQ.html#v:capture">Servant.QQ</a>, Servant</td></tr><tr><td class="src">conj</td><td class="module"><a href="Servant-QQ.html#v:conj">Servant.QQ</a>, Servant</td></tr><tr><td class="src">Delete</td><td class="module"><a href="Servant-API-Delete.html#t:Delete">Servant.API.Delete</a>, Servant.API, Servant</td></tr><tr><td class="src">delete</td><td class="module"><a href="Servant-QQ.html#v:delete">Servant.QQ</a>, Servant</td></tr><tr><td class="src">eol</td><td class="module"><a href="Servant-QQ.html#v:eol">Servant.QQ</a>, Servant</td></tr><tr><td class="src">eols</td><td class="module"><a href="Servant-QQ.html#v:eols">Servant.QQ</a>, Servant</td></tr><tr><td class="src">ExpSYM</td><td class="module"><a href="Servant-QQ.html#t:ExpSYM">Servant.QQ</a>, Servant</td></tr><tr><td class="src">failWith</td><td class="module"><a href="Servant-Server.html#v:failWith">Servant.Server</a>, Servant</td></tr><tr><td class="src">FromText</td><td class="module"><a href="Servant-Common-Text.html#t:FromText">Servant.Common.Text</a>, Servant</td></tr><tr><td class="src">fromText</td><td class="module"><a href="Servant-Common-Text.html#v:fromText">Servant.Common.Text</a>, Servant</td></tr><tr><td class="src">Get</td><td class="module"><a href="Servant-API-Get.html#t:Get">Servant.API.Get</a>, Servant.API, Servant</td></tr><tr><td class="src">get</td><td class="module"><a href="Servant-QQ.html#v:get">Servant.QQ</a>, Servant</td></tr><tr><td class="src">HasServer</td><td class="module"><a href="Servant-Server.html#t:HasServer">Servant.Server</a>, Servant</td></tr><tr><td class="src">Header</td><td class="module"><a href="Servant-API-Header.html#t:Header">Servant.API.Header</a>, Servant.API, Servant</td></tr><tr><td class="src">inlineComment</td><td class="module"><a href="Servant-QQ.html#v:inlineComment">Servant.QQ</a>, Servant</td></tr><tr><td class="src">InvalidBody</td><td class="module"><a href="Servant-Server.html#v:InvalidBody">Servant.Server</a>, Servant</td></tr><tr><td class="src">IsElem</td><td class="module"><a href="Servant-Utils-Links.html#t:IsElem">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">IsLink</td><td class="module"><a href="Servant-Utils-Links.html#t:IsLink">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">IsLink'</td><td class="module"><a href="Servant-Utils-Links.html#t:IsLink-39-">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">IsLink''</td><td class="module"><a href="Servant-Utils-Links.html#t:IsLink-39--39-">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">isMismatch</td><td class="module"><a href="Servant-Server.html#v:isMismatch">Servant.Server</a>, Servant</td></tr><tr><td class="src">Link</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Servant-Utils-Links.html#t:Link">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Servant-Utils-Links.html#v:Link">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">lit</td><td class="module"><a href="Servant-QQ.html#v:lit">Servant.QQ</a>, Servant</td></tr><tr><td class="src">mkLink</td><td class="module"><a href="Servant-Utils-Links.html#v:mkLink">Servant.Utils.Links</a>, Servant.API, Servant</td></tr><tr><td class="src">NotFound</td><td class="module"><a href="Servant-Server.html#v:NotFound">Servant.Server</a>, Servant</td></tr><tr><td class="src">Or</td><td class="module"><a href="Servant-Utils-Links.html#t:Or">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">parseAll</td><td class="module"><a href="Servant-QQ.html#v:parseAll">Servant.QQ</a>, Servant</td></tr><tr><td class="src">parseEntry</td><td class="module"><a href="Servant-QQ.html#v:parseEntry">Servant.QQ</a>, Servant</td></tr><tr><td class="src">parseMethod</td><td class="module"><a href="Servant-QQ.html#v:parseMethod">Servant.QQ</a>, Servant</td></tr><tr><td class="src">parseTyp</td><td class="module"><a href="Servant-QQ.html#v:parseTyp">Servant.QQ</a>, Servant</td></tr><tr><td class="src">parseUrl</td><td class="module"><a href="Servant-QQ.html#v:parseUrl">Servant.QQ</a>, Servant</td></tr><tr><td class="src">parseUrlSegment</td><td class="module"><a href="Servant-QQ.html#v:parseUrlSegment">Servant.QQ</a>, Servant</td></tr><tr><td class="src">Post</td><td class="module"><a href="Servant-API-Post.html#t:Post">Servant.API.Post</a>, Servant.API, Servant</td></tr><tr><td class="src">post</td><td class="module"><a href="Servant-QQ.html#v:post">Servant.QQ</a>, Servant</td></tr><tr><td class="src">Proxy</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Data Constructor)</td><td class="module"><a href="Servant.html#v:Proxy">Servant</a></td></tr><tr><td class="alt">2 (Type/Class)</td><td class="module"><a href="Servant.html#t:Proxy">Servant</a></td></tr><tr><td class="src">Put</td><td class="module"><a href="Servant-API-Put.html#t:Put">Servant.API.Put</a>, Servant.API, Servant</td></tr><tr><td class="src">put</td><td class="module"><a href="Servant-QQ.html#v:put">Servant.QQ</a>, Servant</td></tr><tr><td class="src">QueryFlag</td><td class="module"><a href="Servant-API-QueryParam.html#t:QueryFlag">Servant.API.QueryParam</a>, Servant.API, Servant</td></tr><tr><td class="src">QueryParam</td><td class="module"><a href="Servant-API-QueryParam.html#t:QueryParam">Servant.API.QueryParam</a>, Servant.API, Servant</td></tr><tr><td class="src">queryParam</td><td class="module"><a href="Servant-QQ.html#v:queryParam">Servant.QQ</a>, Servant</td></tr><tr><td class="src">QueryParams</td><td class="module"><a href="Servant-API-QueryParam.html#t:QueryParams">Servant.API.QueryParam</a>, Servant.API, Servant</td></tr><tr><td class="src">Raw</td><td class="module"><a href="Servant-API-Raw.html#t:Raw">Servant.API.Raw</a>, Servant.API, Servant</td></tr><tr><td class="src">ReqArgVal</td><td class="module"><a href="Servant-QQ.html#v:ReqArgVal">Servant.QQ</a>, Servant</td></tr><tr><td class="src">ReqBody</td><td class="module"><a href="Servant-API-ReqBody.html#t:ReqBody">Servant.API.ReqBody</a>, Servant.API, Servant</td></tr><tr><td class="src">reqBody</td><td class="module"><a href="Servant-QQ.html#v:reqBody">Servant.QQ</a>, Servant</td></tr><tr><td class="src">route</td><td class="module"><a href="Servant-Server.html#v:route">Servant.Server</a>, Servant</td></tr><tr><td class="src">RouteMismatch</td><td class="module"><a href="Servant-Server.html#t:RouteMismatch">Servant.Server</a>, Servant</td></tr><tr><td class="src">RouteResult</td><td class="module"><a href="Servant-Server.html#t:RouteResult">Servant.Server</a>, Servant</td></tr><tr><td class="src">routeResult</td><td class="module"><a href="Servant-Server.html#v:routeResult">Servant.Server</a>, Servant</td></tr><tr><td class="src">RoutingApplication</td><td class="module"><a href="Servant-Server.html#t:RoutingApplication">Servant.Server</a>, Servant</td></tr><tr><td class="src">RR</td><td class="module"><a href="Servant-Server.html#v:RR">Servant.Server</a>, Servant</td></tr><tr><td class="src">serve</td><td class="module"><a href="Servant-Server.html#v:serve">Servant.Server</a>, Servant</td></tr><tr><td class="src">serveDirectory</td><td class="module"><a href="Servant-Utils-StaticFiles.html#v:serveDirectory">Servant.Utils.StaticFiles</a>, Servant.API, Servant</td></tr><tr><td class="src">Server</td><td class="module"><a href="Servant-Server.html#t:Server">Servant.Server</a>, Servant</td></tr><tr><td class="src">sitemap</td><td class="module"><a href="Servant-QQ.html#v:sitemap">Servant.QQ</a>, Servant.API, Servant</td></tr><tr><td class="src">succeedWith</td><td class="module"><a href="Servant-Server.html#v:succeedWith">Servant.Server</a>, Servant</td></tr><tr><td class="src">toApplication</td><td class="module"><a href="Servant-Server.html#v:toApplication">Servant.Server</a>, Servant</td></tr><tr><td class="src">ToText</td><td class="module"><a href="Servant-Common-Text.html#t:ToText">Servant.Common.Text</a>, Servant</td></tr><tr><td class="src">toText</td><td class="module"><a href="Servant-Common-Text.html#v:toText">Servant.Common.Text</a>, Servant</td></tr><tr><td class="src">Typ</td><td class="module"><a href="Servant-QQ.html#t:Typ">Servant.QQ</a>, Servant</td></tr><tr><td class="src">Val</td><td class="module"><a href="Servant-QQ.html#v:Val">Servant.QQ</a>, Servant</td></tr><tr><td class="src">ValidLinkIn</td><td class="module"><a href="Servant-Utils-Links.html#t:ValidLinkIn">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">vlh</td><td class="module"><a href="Servant-Utils-Links.html#v:vlh">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">VLinkHelper</td><td class="module"><a href="Servant-Utils-Links.html#t:VLinkHelper">Servant.Utils.Links</a>, Servant</td></tr><tr><td class="src">WrongMethod</td><td class="module"><a href="Servant-Server.html#v:WrongMethod">Servant.Server</a>, Servant</td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.15.0</p></div></body></html>
index-frames.html+1−1
@@ -1,4 +1,4 @@
11<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>servant-0.2: A family of combinators for defining webservices APIs and serving them</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
22window.onload = function () {pageLoad();};
33//]]>
4−</script></head><body id="mini"><div id="module-list"><p class="caption">Modules</p><ul><li class="module"><a href="Servant.html" target="main">Servant</a></li><li class="module"><a href="Servant-API.html" target="main">Servant.API</a></li><li class="module"><a href="Servant-API-Alternative.html" target="main">Servant.API.Alternative</a></li><li class="module"><a href="Servant-API-Capture.html" target="main">Servant.API.Capture</a></li><li class="module"><a href="Servant-API-Delete.html" target="main">Servant.API.Delete</a></li><li class="module"><a href="Servant-API-Get.html" target="main">Servant.API.Get</a></li><li class="module"><a href="Servant-API-Post.html" target="main">Servant.API.Post</a></li><li class="module"><a href="Servant-API-Put.html" target="main">Servant.API.Put</a></li><li class="module"><a href="Servant-API-QueryParam.html" target="main">Servant.API.QueryParam</a></li><li class="module"><a href="Servant-API-Raw.html" target="main">Servant.API.Raw</a></li><li class="module"><a href="Servant-API-ReqBody.html" target="main">Servant.API.ReqBody</a></li><li class="module"><a href="Servant-API-Sub.html" target="main">Servant.API.Sub</a></li><li class="module"><a href="Servant-Common-Text.html" target="main">Servant.Common.Text</a></li><li class="module"><a href="Servant-QQ.html" target="main">Servant.QQ</a></li><li class="module"><a href="Servant-Server.html" target="main">Servant.Server</a></li><li class="module"><a href="Servant-Utils-Links.html" target="main">Servant.Utils.Links</a></li><li class="module"><a href="Servant-Utils-StaticFiles.html" target="main">Servant.Utils.StaticFiles</a></li></ul></div></body></html>
4+</script></head><body id="mini"><div id="module-list"><p class="caption">Modules</p><ul><li class="module"><a href="Servant.html" target="main">Servant</a></li><li class="module"><a href="Servant-API.html" target="main">Servant.API</a></li><li class="module"><a href="Servant-API-Alternative.html" target="main">Servant.API.Alternative</a></li><li class="module"><a href="Servant-API-Capture.html" target="main">Servant.API.Capture</a></li><li class="module"><a href="Servant-API-Delete.html" target="main">Servant.API.Delete</a></li><li class="module"><a href="Servant-API-Get.html" target="main">Servant.API.Get</a></li><li class="module"><a href="Servant-API-Header.html" target="main">Servant.API.Header</a></li><li class="module"><a href="Servant-API-Post.html" target="main">Servant.API.Post</a></li><li class="module"><a href="Servant-API-Put.html" target="main">Servant.API.Put</a></li><li class="module"><a href="Servant-API-QueryParam.html" target="main">Servant.API.QueryParam</a></li><li class="module"><a href="Servant-API-Raw.html" target="main">Servant.API.Raw</a></li><li class="module"><a href="Servant-API-ReqBody.html" target="main">Servant.API.ReqBody</a></li><li class="module"><a href="Servant-API-Sub.html" target="main">Servant.API.Sub</a></li><li class="module"><a href="Servant-Common-Text.html" target="main">Servant.Common.Text</a></li><li class="module"><a href="Servant-QQ.html" target="main">Servant.QQ</a></li><li class="module"><a href="Servant-Server.html" target="main">Servant.Server</a></li><li class="module"><a href="Servant-Utils-Links.html" target="main">Servant.Utils.Links</a></li><li class="module"><a href="Servant-Utils-StaticFiles.html" target="main">Servant.Utils.StaticFiles</a></li></ul></div></body></html>
index.html+1−1
@@ -1,4 +1,4 @@
11<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>servant-0.2: A family of combinators for defining webservices APIs and serving them</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
22window.onload = function () {pageLoad();};
33//]]>
4−</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">servant-0.2: A family of combinators for defining webservices APIs and serving them</p></div><div id="content"><div id="description"><h1>servant-0.2: A family of combinators for defining webservices APIs and serving them</h1><div class="doc empty">&nbsp;</div></div><div id="module-list"><p class="caption">Modules</p><ul><li><span class="module"><span id="control.n.1" class="collapser" onclick="toggleSection('n.1')">&nbsp;</span><a href="Servant.html">Servant</a></span><ul id="section.n.1" class="show"><li><span class="module"><span id="control.n.1.1" class="collapser" onclick="toggleSection('n.1.1')">&nbsp;</span><a href="Servant-API.html">Servant.API</a></span><ul id="section.n.1.1" class="show"><li><span class="module"><a href="Servant-API-Alternative.html">Servant.API.Alternative</a></span></li><li><span class="module"><a href="Servant-API-Capture.html">Servant.API.Capture</a></span></li><li><span class="module"><a href="Servant-API-Delete.html">Servant.API.Delete</a></span></li><li><span class="module"><a href="Servant-API-Get.html">Servant.API.Get</a></span></li><li><span class="module"><a href="Servant-API-Post.html">Servant.API.Post</a></span></li><li><span class="module"><a href="Servant-API-Put.html">Servant.API.Put</a></span></li><li><span class="module"><a href="Servant-API-QueryParam.html">Servant.API.QueryParam</a></span></li><li><span class="module"><a href="Servant-API-Raw.html">Servant.API.Raw</a></span></li><li><span class="module"><a href="Servant-API-ReqBody.html">Servant.API.ReqBody</a></span></li><li><span class="module"><a href="Servant-API-Sub.html">Servant.API.Sub</a></span></li></ul></li><li><span id="control.n.1.2" class="module collapser" onclick="toggleSection('n.1.2')">Common</span><ul id="section.n.1.2" class="show"><li><span class="module"><a href="Servant-Common-Text.html">Servant.Common.Text</a></span></li></ul></li><li><span class="module"><a href="Servant-QQ.html">Servant.QQ</a></span></li><li><span class="module"><a href="Servant-Server.html">Servant.Server</a></span></li><li><span id="control.n.1.5" class="module collapser" onclick="toggleSection('n.1.5')">Utils</span><ul id="section.n.1.5" class="show"><li><span class="module"><a href="Servant-Utils-Links.html">Servant.Utils.Links</a></span></li><li><span class="module"><a href="Servant-Utils-StaticFiles.html">Servant.Utils.StaticFiles</a></span></li></ul></li></ul></li></ul></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.15.0</p></div></body></html>
4+</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">servant-0.2: A family of combinators for defining webservices APIs and serving them</p></div><div id="content"><div id="description"><h1>servant-0.2: A family of combinators for defining webservices APIs and serving them</h1><div class="doc empty">&nbsp;</div></div><div id="module-list"><p class="caption">Modules</p><ul><li><span class="module"><span id="control.n.1" class="collapser" onclick="toggleSection('n.1')">&nbsp;</span><a href="Servant.html">Servant</a></span><ul id="section.n.1" class="show"><li><span class="module"><span id="control.n.1.1" class="collapser" onclick="toggleSection('n.1.1')">&nbsp;</span><a href="Servant-API.html">Servant.API</a></span><ul id="section.n.1.1" class="show"><li><span class="module"><a href="Servant-API-Alternative.html">Servant.API.Alternative</a></span></li><li><span class="module"><a href="Servant-API-Capture.html">Servant.API.Capture</a></span></li><li><span class="module"><a href="Servant-API-Delete.html">Servant.API.Delete</a></span></li><li><span class="module"><a href="Servant-API-Get.html">Servant.API.Get</a></span></li><li><span class="module"><a href="Servant-API-Header.html">Servant.API.Header</a></span></li><li><span class="module"><a href="Servant-API-Post.html">Servant.API.Post</a></span></li><li><span class="module"><a href="Servant-API-Put.html">Servant.API.Put</a></span></li><li><span class="module"><a href="Servant-API-QueryParam.html">Servant.API.QueryParam</a></span></li><li><span class="module"><a href="Servant-API-Raw.html">Servant.API.Raw</a></span></li><li><span class="module"><a href="Servant-API-ReqBody.html">Servant.API.ReqBody</a></span></li><li><span class="module"><a href="Servant-API-Sub.html">Servant.API.Sub</a></span></li></ul></li><li><span id="control.n.1.2" class="module collapser" onclick="toggleSection('n.1.2')">Common</span><ul id="section.n.1.2" class="show"><li><span class="module"><a href="Servant-Common-Text.html">Servant.Common.Text</a></span></li></ul></li><li><span class="module"><a href="Servant-QQ.html">Servant.QQ</a></span></li><li><span class="module"><a href="Servant-Server.html">Servant.Server</a></span></li><li><span id="control.n.1.5" class="module collapser" onclick="toggleSection('n.1.5')">Utils</span><ul id="section.n.1.5" class="show"><li><span class="module"><a href="Servant-Utils-Links.html">Servant.Utils.Links</a></span></li><li><span class="module"><a href="Servant-Utils-StaticFiles.html">Servant.Utils.StaticFiles</a></span></li></ul></li></ul></li></ul></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.15.0</p></div></body></html>
mini_Servant-API-Header.htmlnew file+4
@@ -0,0 +1,4 @@
1+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Servant.API.Header</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
2+window.onload = function () {pageLoad();};
3+//]]>
4+</script></head><body id="mini"><div id="module-header"><p class="caption">Servant.API.Header</p></div><div id="interface"><div class="top"><p class="src"><span class="keyword">data</span> <a href="Servant-API-Header.html#t:Header" target="main">Header</a> sym a</p></div></div></body></html>
servant.haddock

Binary file not shown.

servant.txt+39
@@ -178,6 +178,45 @@ module Servant.API.Capture
178178data Capture sym a
179179instance (KnownSymbol capture, FromText a, HasServer sublayout) => HasServer (Capture capture a :> sublayout)
180180
181+module Servant.API.Header
182+
183+-- | Extract the given header's value as a value of type <tt>a</tt>.
184+--
185+-- Example:
186+--
187+-- <pre>
188+-- newtype Referer = Referer Text
189+-- deriving (Eq, Show, FromText, ToText)
190+--
191+-- -- GET /view-my-referer
192+-- type MyApi = "view-my-referer" :&gt; Header "from" Referer :&gt; Get Referer
193+-- </pre>
194+data Header sym a
195+
196+-- | If you use <a>Header</a> in one of the endpoints for your API, this
197+-- automatically requires your server-side handler to be a function that
198+-- takes an argument of the type specified by <a>Header</a>. This lets
199+-- servant worry about extracting it from the request and turning it into
200+-- a value of the type you specify.
201+--
202+-- All it asks is for a <a>FromText</a> instance.
203+--
204+-- Example:
205+--
206+-- <pre>
207+-- newtype Referer = Referer Text
208+-- deriving (Eq, Show, FromText, ToText)
209+--
210+-- -- GET /view-my-referer
211+-- type MyApi = "view-my-referer" :&gt; Header "Referer" Referer :&gt; Get Referer
212+--
213+-- server :: Server MyApi
214+-- server = viewReferer
215+-- where viewReferer :: Referer -&gt; EitherT (Int, String) IO referer
216+-- viewReferer referer = return referer
217+-- </pre>
218+instance (KnownSymbol sym, FromText a, HasServer sublayout) => HasServer (Header sym a :> sublayout)
219+
181220module Servant.API.QueryParam
182221
183222-- | Lookup the value associated to the <tt>sym</tt> query string parameter
src/Servant-API-Header.htmlnew file+69
@@ -0,0 +1,69 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3+<html>
4+<head>
5+<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
6+<title>src/Servant/API/Header.hs</title>
7+<link type='text/css' rel='stylesheet' href='hscolour.css' />
8+</head>
9+<body>
10+<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE PolyKinds #-}</span>
11+<a name="line-2"></a><span class='hs-comment'>{-# LANGUAGE TypeFamilies #-}</span>
12+<a name="line-3"></a><span class='hs-comment'>{-# LANGUAGE TypeOperators #-}</span>
13+<a name="line-4"></a><span class='hs-comment'>{-# LANGUAGE FlexibleInstances #-}</span>
14+<a name="line-5"></a><span class='hs-comment'>{-# LANGUAGE ScopedTypeVariables #-}</span>
15+<a name="line-6"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Header</span> <span class='hs-keyword'>where</span>
16+<a name="line-7"></a>
17+<a name="line-8"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Proxy</span>
18+<a name="line-9"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>String</span>
19+<a name="line-10"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>Encoding</span> <span class='hs-layout'>(</span><span class='hs-varid'>decodeUtf8</span><span class='hs-layout'>)</span>
20+<a name="line-11"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>GHC</span><span class='hs-varop'>.</span><span class='hs-conid'>TypeLits</span>
21+<a name="line-12"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Network</span><span class='hs-varop'>.</span><span class='hs-conid'>Wai</span>
22+<a name="line-13"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Sub</span>
23+<a name="line-14"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>Common</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span>
24+<a name="line-15"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>Server</span>
25+<a name="line-16"></a>
26+<a name="line-17"></a><a name="HasServer"></a><span class='hs-comment'>-- | Extract the given header's value as a value of type @a@.</span>
27+<a name="line-18"></a><a name="HasServer"></a><span class='hs-comment'>--</span>
28+<a name="line-19"></a><a name="HasServer"></a><span class='hs-comment'>-- Example:</span>
29+<a name="line-20"></a><a name="HasServer"></a><span class='hs-comment'>--</span>
30+<a name="line-21"></a><a name="HasServer"></a><span class='hs-comment'>-- &gt; newtype Referer = Referer Text</span>
31+<a name="line-22"></a><a name="HasServer"></a><span class='hs-comment'>-- &gt; deriving (Eq, Show, FromText, ToText)</span>
32+<a name="line-23"></a><a name="HasServer"></a><span class='hs-comment'>-- &gt;</span>
33+<a name="line-24"></a><a name="HasServer"></a><span class='hs-comment'>-- &gt; -- GET /view-my-referer</span>
34+<a name="line-25"></a><a name="HasServer"></a><span class='hs-comment'>-- &gt; type MyApi = "view-my-referer" :&gt; Header "from" Referer :&gt; Get Referer</span>
35+<a name="line-26"></a><a name="HasServer"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Header</span> <span class='hs-varid'>sym</span> <span class='hs-varid'>a</span>
36+<a name="line-27"></a>
37+<a name="line-28"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- | If you use 'Header' in one of the endpoints for your API,</span>
38+<a name="line-29"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- this automatically requires your server-side handler to be a function</span>
39+<a name="line-30"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- that takes an argument of the type specified by 'Header'.</span>
40+<a name="line-31"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- This lets servant worry about extracting it from the request and turning</span>
41+<a name="line-32"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- it into a value of the type you specify.</span>
42+<a name="line-33"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>--</span>
43+<a name="line-34"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- All it asks is for a 'FromText' instance.</span>
44+<a name="line-35"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>--</span>
45+<a name="line-36"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- Example:</span>
46+<a name="line-37"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>--</span>
47+<a name="line-38"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- &gt; newtype Referer = Referer Text</span>
48+<a name="line-39"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- &gt; deriving (Eq, Show, FromText, ToText)</span>
49+<a name="line-40"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- &gt;</span>
50+<a name="line-41"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- &gt; -- GET /view-my-referer</span>
51+<a name="line-42"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- &gt; type MyApi = "view-my-referer" :&gt; Header "Referer" Referer :&gt; Get Referer</span>
52+<a name="line-43"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- &gt;</span>
53+<a name="line-44"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- &gt; server :: Server MyApi</span>
54+<a name="line-45"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- &gt; server = viewReferer</span>
55+<a name="line-46"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- &gt; where viewReferer :: Referer -&gt; EitherT (Int, String) IO referer</span>
56+<a name="line-47"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-comment'>-- &gt; viewReferer referer = return referer</span>
57+<a name="line-48"></a><a name="instance%20HasServer%20(Header%20sym%20a%20:%3e%20sublayout)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>KnownSymbol</span> <span class='hs-varid'>sym</span><span class='hs-layout'>,</span> <span class='hs-conid'>FromText</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-conid'>HasServer</span> <span class='hs-varid'>sublayout</span><span class='hs-layout'>)</span>
58+<a name="line-49"></a> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>HasServer</span> <span class='hs-layout'>(</span><span class='hs-conid'>Header</span> <span class='hs-varid'>sym</span> <span class='hs-varid'>a</span> <span class='hs-conop'>:&gt;</span> <span class='hs-varid'>sublayout</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
59+<a name="line-50"></a>
60+<a name="line-51"></a> <span class='hs-keyword'>type</span> <span class='hs-conid'>Server</span> <span class='hs-layout'>(</span><span class='hs-conid'>Header</span> <span class='hs-varid'>sym</span> <span class='hs-varid'>a</span> <span class='hs-conop'>:&gt;</span> <span class='hs-varid'>sublayout</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
61+<a name="line-52"></a> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Server</span> <span class='hs-varid'>sublayout</span>
62+<a name="line-53"></a>
63+<a name="line-54"></a> <span class='hs-varid'>route</span> <span class='hs-conid'>Proxy</span> <span class='hs-varid'>subserver</span> <span class='hs-varid'>request</span> <span class='hs-varid'>respond</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
64+<a name="line-55"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>mheader</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fromText</span> <span class='hs-varop'>.</span> <span class='hs-varid'>decodeUtf8</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>lookup</span> <span class='hs-varid'>str</span> <span class='hs-layout'>(</span><span class='hs-varid'>requestHeaders</span> <span class='hs-varid'>request</span><span class='hs-layout'>)</span>
65+<a name="line-56"></a> <span class='hs-varid'>route</span> <span class='hs-layout'>(</span><span class='hs-conid'>Proxy</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Proxy</span> <span class='hs-varid'>sublayout</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>subserver</span> <span class='hs-varid'>mheader</span><span class='hs-layout'>)</span> <span class='hs-varid'>request</span> <span class='hs-varid'>respond</span>
66+<a name="line-57"></a>
67+<a name="line-58"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>str</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fromString</span> <span class='hs-varop'>$</span> <span class='hs-varid'>symbolVal</span> <span class='hs-layout'>(</span><span class='hs-conid'>Proxy</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Proxy</span> <span class='hs-varid'>sym</span><span class='hs-layout'>)</span>
68+</pre></body>
69+</html>
src/Servant-API.html+43−40
@@ -18,45 +18,48 @@
1818<a name="line-9"></a> <span class='hs-comment'>-- * Accessing information from the request</span>
1919<a name="line-10"></a> <span class='hs-comment'>-- | Capturing parts of the url path as parsed values: @'Capture'@</span>
2020<a name="line-11"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Capture</span><span class='hs-layout'>,</span>
21−<a name="line-12"></a> <span class='hs-comment'>-- | Retrieving parameters from the query string of the 'URI': @'QueryParam'@</span>
22−<a name="line-13"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>QueryParam</span><span class='hs-layout'>,</span>
23−<a name="line-14"></a> <span class='hs-comment'>-- | Accessing the request body as a JSON-encoded type: @'ReqBody'@</span>
24−<a name="line-15"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>ReqBody</span><span class='hs-layout'>,</span>
25−<a name="line-16"></a>
26−<a name="line-17"></a> <span class='hs-comment'>-- * Actual endpoints, distinguished by HTTP method</span>
27−<a name="line-18"></a> <span class='hs-comment'>-- | GET requests</span>
28−<a name="line-19"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Get</span><span class='hs-layout'>,</span>
29−<a name="line-20"></a> <span class='hs-comment'>-- | POST requests</span>
30−<a name="line-21"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Post</span><span class='hs-layout'>,</span>
31−<a name="line-22"></a> <span class='hs-comment'>-- | DELETE requests</span>
32−<a name="line-23"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Delete</span><span class='hs-layout'>,</span>
33−<a name="line-24"></a> <span class='hs-comment'>-- | PUT requests</span>
34−<a name="line-25"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Put</span><span class='hs-layout'>,</span>
35−<a name="line-26"></a>
36−<a name="line-27"></a> <span class='hs-comment'>-- * Untyped endpoints</span>
37−<a name="line-28"></a> <span class='hs-comment'>-- | Plugging in a wai 'Network.Wai.Application', serving directories</span>
38−<a name="line-29"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Raw</span><span class='hs-layout'>,</span>
39−<a name="line-30"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>StaticFiles</span><span class='hs-layout'>,</span>
40−<a name="line-31"></a>
41−<a name="line-32"></a> <span class='hs-comment'>-- * Utilities</span>
42−<a name="line-33"></a> <span class='hs-comment'>-- | QuasiQuotes for endpoints</span>
43−<a name="line-34"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>QQ</span><span class='hs-layout'>,</span>
44−<a name="line-35"></a> <span class='hs-comment'>-- | Type-safe internal URLs</span>
45−<a name="line-36"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>Links</span><span class='hs-layout'>,</span>
46−<a name="line-37"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
47−<a name="line-38"></a>
48−<a name="line-39"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Alternative</span>
49−<a name="line-40"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Capture</span>
50−<a name="line-41"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Delete</span>
51−<a name="line-42"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Get</span>
52−<a name="line-43"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Post</span>
53−<a name="line-44"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Put</span>
54−<a name="line-45"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>QueryParam</span>
55−<a name="line-46"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Raw</span>
56−<a name="line-47"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>ReqBody</span>
57−<a name="line-48"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Sub</span>
58−<a name="line-49"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>QQ</span> <span class='hs-layout'>(</span><span class='hs-varid'>sitemap</span><span class='hs-layout'>)</span>
59−<a name="line-50"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>Links</span> <span class='hs-layout'>(</span><span class='hs-varid'>mkLink</span><span class='hs-layout'>)</span>
60−<a name="line-51"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>StaticFiles</span>
21+<a name="line-12"></a> <span class='hs-comment'>-- | Retrieving specific headers from the request</span>
22+<a name="line-13"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Header</span><span class='hs-layout'>,</span>
23+<a name="line-14"></a> <span class='hs-comment'>-- | Retrieving parameters from the query string of the 'URI': @'QueryParam'@</span>
24+<a name="line-15"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>QueryParam</span><span class='hs-layout'>,</span>
25+<a name="line-16"></a> <span class='hs-comment'>-- | Accessing the request body as a JSON-encoded type: @'ReqBody'@</span>
26+<a name="line-17"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>ReqBody</span><span class='hs-layout'>,</span>
27+<a name="line-18"></a>
28+<a name="line-19"></a> <span class='hs-comment'>-- * Actual endpoints, distinguished by HTTP method</span>
29+<a name="line-20"></a> <span class='hs-comment'>-- | GET requests</span>
30+<a name="line-21"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Get</span><span class='hs-layout'>,</span>
31+<a name="line-22"></a> <span class='hs-comment'>-- | POST requests</span>
32+<a name="line-23"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Post</span><span class='hs-layout'>,</span>
33+<a name="line-24"></a> <span class='hs-comment'>-- | DELETE requests</span>
34+<a name="line-25"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Delete</span><span class='hs-layout'>,</span>
35+<a name="line-26"></a> <span class='hs-comment'>-- | PUT requests</span>
36+<a name="line-27"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Put</span><span class='hs-layout'>,</span>
37+<a name="line-28"></a>
38+<a name="line-29"></a> <span class='hs-comment'>-- * Untyped endpoints</span>
39+<a name="line-30"></a> <span class='hs-comment'>-- | Plugging in a wai 'Network.Wai.Application', serving directories</span>
40+<a name="line-31"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Raw</span><span class='hs-layout'>,</span>
41+<a name="line-32"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>StaticFiles</span><span class='hs-layout'>,</span>
42+<a name="line-33"></a>
43+<a name="line-34"></a> <span class='hs-comment'>-- * Utilities</span>
44+<a name="line-35"></a> <span class='hs-comment'>-- | QuasiQuotes for endpoints</span>
45+<a name="line-36"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>QQ</span><span class='hs-layout'>,</span>
46+<a name="line-37"></a> <span class='hs-comment'>-- | Type-safe internal URLs</span>
47+<a name="line-38"></a> <span class='hs-keyword'>module</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>Links</span><span class='hs-layout'>,</span>
48+<a name="line-39"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
49+<a name="line-40"></a>
50+<a name="line-41"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Alternative</span>
51+<a name="line-42"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Capture</span>
52+<a name="line-43"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Delete</span>
53+<a name="line-44"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Get</span>
54+<a name="line-45"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Header</span>
55+<a name="line-46"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Post</span>
56+<a name="line-47"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Put</span>
57+<a name="line-48"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>QueryParam</span>
58+<a name="line-49"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Raw</span>
59+<a name="line-50"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>ReqBody</span>
60+<a name="line-51"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>API</span><span class='hs-varop'>.</span><span class='hs-conid'>Sub</span>
61+<a name="line-52"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>QQ</span> <span class='hs-layout'>(</span><span class='hs-varid'>sitemap</span><span class='hs-layout'>)</span>
62+<a name="line-53"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>Links</span> <span class='hs-layout'>(</span><span class='hs-varid'>mkLink</span><span class='hs-layout'>)</span>
63+<a name="line-54"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Servant</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>StaticFiles</span>
6164</pre></body>
6265</html>