Commit graph

382 commits

Author SHA1 Message Date
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
Ben Gamari
939a008b67 Bump aeson bound 2015-06-03 06:53:34 -04:00
Julian K. Arni
0b3291970f Bump to 0.4.1 2015-05-29 16:24:08 +02:00
Alp Mestanogullari
db8cf8bd8d Merge pull request #106 from haskell-servant/jkarni/bump-either
Bump 'either' upper-bound
2015-05-29 14:56:45 +01:00
Julian K. Arni
ce012da4ee Bump 'either' upper-bound 2015-05-29 14:37:10 +02:00
Julian K. Arni
5de9daf528 Fix outdated docs 2015-05-29 10:59:24 +02:00
Julian K. Arni
28387b7804 Update changelog 2015-05-27 15:29:34 +02:00
Julian K. Arni
2bff26feca Bump attoparsec 2015-05-27 15:19:30 +02:00
Julian Arni
763928cd66 Merge pull request #82 from triplepointfive/drop-system-filepath
Add support for wai-app-static-3.1.0
2015-05-18 12:55:40 +02:00
Christian Marie
ec55177796 servant, servant-server: handle corner case in doctests
They seem to encounter multiple sandboxes sometimes, we now provide a more
helpful error if that happens. Didn't look into why this happens.
2015-05-16 12:45:08 +10:00
Ilya Smelkov
7e14eeafe9 Use filepath to add trailing path separator 2015-05-16 01:03:48 +03:00
Julian K. Arni
c41267811e CPP for support for all 3.X versions of wai-app-static 2015-05-16 01:01:55 +03:00
Sönke Hahn
0d47f4527b fix doctests for cabal-install-1.18 2015-05-14 19:47:39 +08:00
Alp Mestanogullari
405d69d954 fix some links in the cabal descriptions 2015-05-11 10:43:52 +02:00
Julian K. Arni
b81ea9eee2 Bump everything to 0.4 2015-05-09 17:28:52 +02:00
Brandon Martin
95abfc4090 fix ToSample instance and update changelogs 2015-05-07 05:22:01 -06:00
Brandon Martin
10a6020ca2 modify delete to allow for response body 2015-05-06 13:21:35 -06:00
Julian K. Arni
59cc7972de Changelog updates 2015-05-04 17:04:11 +02:00
Julian K. Arni
92d65aaf49 -Wall fixes 2015-05-03 13:36:51 +02:00
Julian K. Arni
50b05860b7 Remove Canonicalize 2015-05-03 01:45:17 +02:00
Julian K. Arni
bdf6d9aa48 Better docs for servant-server 2015-05-03 01:28:13 +02:00
Julian K. Arni
3b4b958110 Doctests for servant-server 2015-05-03 01:27:48 +02:00
Julian K. Arni
74f4d2db14 Enter via natural transformations 2015-05-03 00:15:35 +02:00
Julian K. Arni
a2b8d6ae58 Better servant-server left 2015-05-02 03:38:53 +01:00
Julian K. Arni
5531ada22b Headers for all 2015-05-02 02:21:03 +01:00
Julian K. Arni
7cb2ca05c4 7.10 CPP
Including some annoying hacks to work around CPP comments.
2015-04-22 14:57:30 +02:00
Julian K. Arni
f82ca76f7d 7.10 changes 2015-04-22 12:27:18 +02:00
Julian K. Arni
019d49e782 default.nix and sources files 2015-04-20 19:13:55 +02:00
Julian K. Arni
669fb6e371 Add link to changelogs in cabal file 2015-04-20 16:00:51 +02:00
Julian K. Arni
4ab74434b3 update cabal files for the repo merge 2015-04-20 15:55:41 +02:00
Julian K. Arni
d418ed4b0e Update READMEs 2015-04-20 15:48:37 +02:00
Julian K. Arni
ed502f5f21 Prepare merge 2015-04-20 11:13:18 +02:00