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 ... => HasServers instances in GHC-8.2 for
not saturated modifiers (Capture "foo" :> ...) or -> in place of :>.
(#893)
Prevent double-escaping in link segments
(#835#878)
0.12
Significant changes
servant-clientservant-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
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