-
Streaming endpoint support.
(#836)
type StreamApi f = "streamGetNewline" :> StreamGet NewlineFraming JSON (f Person)
See tutorial for more details
-
servant Add Servant.API.Modifiers
(#873
#903)
QueryParam
, Header
and ReqBody
understand modifiers:
Required
or Optional
(resulting in a
or Maybe a
in handlers)
Strict
or Lenient
(resulting in a
or Either String a
in handlers)
Also you can use Description
as a modifier, but it doesn’t yet work
with servant-docs
, only servant-swagger
. There is an issue.
-
servant-client Support http-client
’s CookieJar
(#897
#883)
ClientM
preserves cookies between requests,
if given initial CookieJar
.
To migrate from older code, change ClientEnv
constructor
to mkClientEnv
which makes ClientEnv
without CookieJar
.
-
servant Mono-kind-ise modifiers, resulting in better error messages.
(#887
#890)
-
servant Add TypeError ... => HasServer
s instances in GHC-8.2 for
not saturated modifiers (Capture "foo" :> ...
) or ->
in place of :>
.
(#893)
-
Cookbook example projects at
http://haskell-servant.readthedocs.io/en/master/cookbook/index.html
(#867
#892)
-
Experimental work servant-client-ghcjs
(#818
#869)
-
servant-client servant-client-core
Factored out of servant-client
all the functionality that was
independent of the http-client
backend.
(#803
#821)
If you have own combinators, you’ll need to add an additional m
argument
in HasClient
, Client
and clientWithRoute
:
-class HasClient api
- type Client (api :: *) :: *
- clientWithRoute :: Proxy api -> Req -> Client api
+class HasClient m api
+ type Client (m :: * -> *) (api :: *) :: *
+ clientWithRoute :: Proxy m -> Proxy api -> Request -> Client m api
See https://github.com/haskell-servant/servant-auth/pull/67/commits/f777818e3cc0fa3ed2346baff8328e96d62b1790 for a real world example.
-
servant-server Added hoistServer
member to the HasServer
class, which is HasServer
specific enter
.
(#804
#824)
enter
isn’t exported from Servant
module anymore. You can change
enter
to hoistServer
in a straight forward way.
Unwrap natural transformation and add a api type Proxy
:
-server = enter (NT nt) impl
+server = hoistServer (Proxy :: Proxy MyApi) nt impl
If you have own combinators, you’ll need to define a new method of
HasServer
class, for example:
type ServerT (MyCombinator :> api) m = MyValue -> ServerT api m
hoistServerWithContext _ pc nt s = hoistServerWithContext (Proxy :: Proxy api) pc nt . s
See https://github.com/haskell-servant/servant-auth/pull/67/commits/8ee3b6315247ac076516213fd7cfcdbfdb583ac9 for a real world example.
-
Add Description
and Summary
combinators
(#767)
It’s possible to annotate endpoints with free form text.
This information is used by e.g. by servant-swagger
, see screenshot in
https://github.com/phadej/servant-swagger-ui
-
Lower :>
and :<|>
infix precedence to 4 and 3 respectively
(#761)
This shouldn’t affect you, except if you define your own infix operators
for Servant type-level DSL.