servant/servant-server
Andres Loeh f9b1e7fc50 Switch server interpretation to a datatype for efficiency.
Instead of directly interpreting a server as a `RoutingApplication`,
this change introduces the concept of a `Router`, which is a datatype
with several constructors.

In particular, the type of the `route` function changes from

    route :: Proxy layout -> Server layout -> RoutingApplication

to

    route :: Proxy layout -> IO (RouteResult (Server layout)) -> Router

Most important in practice is the case of the `StaticRouter` constructor
in `Router`. For choices between statically known paths, we can now use
a lookup table to dispatch requests rather than trying each request
individually.

This brings down routing complexity of a common case from
O(n) to O(log n).

Another important change is that the handler that is passed down by
`route` is no longer of type `Server layout`, but of type
`IO (RouteResult (Server layout))`. This means that API constructs
can "delay" checks and failure. For example, `ReqBody` does not have
to fetch the request body and feed it to the handler immediately; it
can instead record these actions in the handler that is passed down.
The code will only be executed at a leaf / endpoint of the API.

This is desired behaviour: We prefer to save work by doing all matching
on static path components first. Furthermore, we get better error codes
by doing so.
2015-06-04 13:07:53 +02:00
..
example Fix outdated docs 2015-05-29 10:59:24 +02:00
src Switch server interpretation to a datatype for efficiency. 2015-06-04 13:07:53 +02:00
test servant, servant-server: handle corner case in doctests 2015-05-16 12:45:08 +10:00
CHANGELOG.md Bump 'either' upper-bound 2015-05-29 14:37:10 +02:00
default.nix Bump everything to 0.4 2015-05-09 17:28:52 +02:00
LICENSE Prepare merge 2015-04-20 11:13:18 +02:00
README.md Update READMEs 2015-04-20 15:48:37 +02:00
servant-server.cabal Switch server interpretation to a datatype for efficiency. 2015-06-04 13:07:53 +02:00
Setup.hs Prepare merge 2015-04-20 11:13:18 +02:00

servant-server

servant

This library lets you implement an HTTP server with handlers for each endpoint of a servant API, handling most of the boilerplate for you.

Getting started

We've written a Getting Started guide that introduces the core types and features of servant. After this article, you should be able to write your first servant webservices, learning the rest from the haddocks' examples.

Repositories and Haddocks