servant-0.2: A family of combinators for defining webservices APIs and serving them

Safe HaskellNone




data Capture sym a Source

Capture a value from the request path under a certain type a.


           -- GET /books/:isbn
type MyApi = "books" :> Capture "isbn" Text :> Get Book


(KnownSymbol capture, FromText a, HasServer sublayout) => HasServer ((:>) * (Capture Symbol * capture a) sublayout)

If you use Capture in one of the endpoints for your API, this automatically requires your server-side handler to be a function that takes an argument of the type specified by the Capture. This lets servant worry about getting it from the URL and turning it into a value of the type you specify.

You can control how it'll be converted from Text to your type by simply providing an instance of FromText for your type.


type MyApi = "books" :> Capture "isbn" Text :> Get Book

server :: Server MyApi
server = getBook
  where getBook :: Text -> EitherT (Int, String) IO Book
        getBook isbn = ...
type Server ((:>) * (Capture Symbol * capture a) sublayout) = a -> Server sublayout