-
Stream
takes a status code argument
-Stream method framing ctype a
+Stream method status framing ctype a
(#966
#972)
-
ToStreamGenerator
definition changed, so it’s possible to write an instance
for conduits.
-class ToStreamGenerator f a where
- toStreamGenerator :: f a -> StreamGenerator a
+class ToStreamGenerator a b | a -> b where
+ toStreamGenerator :: a -> StreamGenerator b
(#959)
-
Added NoFraming
streaming strategy
(#959)
-
servant-client-core Free Client
implementation.
Useful for testing HasClient
instances.
(#920)
-
servant-client-core Add hoistClient
to HasClient
.
Just like hoistServer
allows us to change the monad in which request handlers
of a web application live in, we also have hoistClient
for changing the monad
in which client functions live.
Read tutorial section for more information.
(#936)
iF you have own combinators, you’ll need to define a new method of
HasClient
class, for example:
type Client m (MyCombinator :> api) = MyValue :> Client m api
hoistClientMonad pm _ nt cl = hoistClientMonad pm (Proxy :: Proxy api) nt . cl
-
servant Add safeLink' :: (Link -> a) -> ... -> MkLink endpoint a
,
which allows to create helpers returning something else than Link
.
(#968)
-
servant-server File serving in polymorphic monad.
i.e. Generalised types of serveDirectoryFileServer
etc functions in
Servant.Utils.StaticFiles
(#953)
-
servant-server ReqBody
content type check is recoverable.
This allows writing APIs like:
ReqBody '[JSON] Int :> Post '[PlainText] Int
:<|> ReqBody '[PlainText] Int :> Post '[PlainText] Int
which is useful when handlers are subtly different,
for example may do less work.
(#937)
-
servant-client Add more constructors to RequestBody
, including
RequestBodyStream
.
Note: we are looking for http-library agnostic API,
so the might change again soon.
Tell us which constructors are useful for you!
(#913)
-
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.