git.iko.soy/typeable/servant
on orphan-instances help sign in
400 lines 14 kB history raw
1[The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant-client/CHANGELOG.md)
2[Changelog for `servant` package contains significant entries for all core packages.](https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md)
4Package versions follow the [Package Versioning Policy](https://pvp.haskell.org/): in A.B.C, bumps to either A or B represent major versions.
60.19
7----
9### Significant changes
11- Drop support for GHC < 8.6.
12- Support GHC 9.0 (GHC 9.2 should work as well, but isn't fully tested yet).
13- Support Aeson 2 ([#1475](https://github.com/haskell-servant/servant/pull/1475)),
14 which fixes a [DOS vulnerability](https://github.com/haskell/aeson/issues/864)
15 related to hash collisions.
16- Add `NamedRoutes` combinator, making support for records first-class in Servant
17 ([#1388](https://github.com/haskell-servant/servant/pull/1388)).
18- Add custom type errors for partially applied combinators
19 ([#1289](https://github.com/haskell-servant/servant/pull/1289),
20 [#1486](https://github.com/haskell-servant/servant/pull/1486)).
21- *servant-client* / *servant-client-core* / *servant-http-streams*: Fix
22 erroneous behavior, where only 2XX status codes would be considered
23 successful, irrelevant of the status parameter specified by the verb
24 combinator. ([#1469](https://github.com/haskell-servant/servant/pull/1469))
25- *servant-client* / *servant-client-core*: Fix `Show` instance for
26 `Servant.Client.Core.Request`.
27- *servant-client* / *servant-client-core*: Allow passing arbitrary binary data
28 in Query parameters.
29 ([#1432](https://github.com/haskell-servant/servant/pull/1432)).
31### Other changes
33- Various version bumps.
350.18.3
36------
38### Significant changes
40- Add response header support to UVerb (#1420)
42### Other changes
44- Support GHC-9.0.1.
45- Bump `bytestring`, `hspec`, `http-client` and `QuickCheck` dependencies.
470.18.2
48------
50### Significant changes
52- Support `Fragment` combinator.
540.18.1
55------
57### Significant changes
59- Union verbs
61### Other changes
63- Bump "tested-with" ghc versions
650.18
66----
68### Significant changes
70- Support for ghc8.8 (#1318, #1326, #1327)
730.17
74----
76### Significant changes
78- Add NoContentVerb [#1028](https://github.com/haskell-servant/servant/issues/1028) [#1219](https://github.com/haskell-servant/servant/pull/1219) [#1228](https://github.com/haskell-servant/servant/pull/1228)
80 The `NoContent` API endpoints should now use `NoContentVerb` combinator.
81 The API type changes are usually of the kind
83 ```diff
84 - :<|> PostNoContent '[JSON] NoContent
85 + :<|> PostNoContent
86 ```
88 i.e. one doesn't need to specify the content-type anymore. There is no content.
90- `Capture` can be `Lenient` [#1155](https://github.com/haskell-servant/servant/issues/1155) [#1156](https://github.com/haskell-servant/servant/pull/1156)
92 You can specify a lenient capture as
94 ```haskell
95 :<|> "capture-lenient" :> Capture' '[Lenient] "foo" Int :> GET
96 ```
98 which will make the capture always succeed. Handlers will be of the
99 type `Either String CapturedType`, where `Left err` represents
100 the possible parse failure.
102- *servant-client* Added a function to create Client.Request in ClientEnv [#1213](https://github.com/haskell-servant/servant/pull/1213) [#1255](https://github.com/haskell-servant/servant/pull/1255)
104 The new member `makeClientRequest` of `ClientEnv` is used to create
105 `http-client` `Request` from `servant-client-core` `Request`.
106 This functionality can be used for example to set
107 dynamic timeouts for each request.
109### Other changes
111- *servant-client* *servant-client-core* *servant-http-streams* Fix Verb with headers checking content type differently [#1200](https://github.com/haskell-servant/servant/issues/1200) [#1204](https://github.com/haskell-servant/servant/pull/1204)
113 For `Verb`s with response `Headers`, the implementation didn't check
114 for the content-type of the response. Now it does.
116- *servant-client* *servant-http-streams* `HasClient` instance for `Stream` with `Headers` [#1170](https://github.com/haskell-servant/servant/issues/1170) [#1197](https://github.com/haskell-servant/servant/pull/1197)
117- *servant-client* Redact the authorization header in Show and exceptions [#1238](https://github.com/haskell-servant/servant/pull/1238)
1210.16.0.1
122--------
124- Allow `base-compat-0.11`
1260.16
127----
129- Rename `ServantError` to `ClientError`, `ServantErr` to `ServerError`
130 [#1131](https://github.com/haskell-servant/servant/pull/1131)
132- *servant-client-core* Rearrange modules. No more `Internal` modules, whole
133 API is versioned.
134 [#1130](https://github.com/haskell-servant/servant/pull/1130)
136- *servant-client-core* `RequestBody` is now
138 ```haskell
139 = RequestBodyLBS LBS.ByteString
140 | RequestBodyBS BS.ByteString
141 | RequestBodySource (SourceIO LBS.ByteString)
142 ```
144 i.e. no more replicates `http-client`s API.
145 [#1117](https://github.com/haskell-servant/servant/pull/1117)
147- *servant-client-core* Keep structured exceptions in `ConnectionError`
148 constructor of `ClientError`
149 [#1115](https://github.com/haskell-servant/servant/pull/1115)
151 ```diff
152 -| ConnectionError Text
153 +| ConnectionError SomeException
154 ```
156- *servant-client-core* Preserve failing request in `FailureResponse`
157 constructor of `ClientError`
158 [#1114](https://github.com/haskell-servant/servant/pull/1114)
160 ```diff
161 -FailureResponse Response
162 +-- | The server returned an error response including the
163 +-- failing request. 'requestPath' includes the 'BaseUrl' and the
164 +-- path of the request.
165 +FailureResponse (RequestF () (BaseUrl, BS.ByteString)) Response
166 ```
168- *servant-client* Fix (implement) `StreamBody` instance
169 [#1110](https://github.com/haskell-servant/servant/pull/1110)
171- *servant-client* Update CookieJar with intermediate request/responses (redirects)
172 [#1104](https://github.com/haskell-servant/servant/pull/1104)
1740.15
175----
177- Streaming refactoring.
178 [#991](https://github.com/haskell-servant/servant/pull/991)
179 [#1076](https://github.com/haskell-servant/servant/pull/1076)
180 [#1077](https://github.com/haskell-servant/servant/pull/1077)
182 The streaming functionality (`Servant.API.Stream`) is refactored to use
183 `servant`'s own `SourceIO` type (see `Servant.Types.SourceT` documentation),
184 which replaces both `StreamGenerator` and `ResultStream` types.
186 New conversion type-classes are `ToSourceIO` and `FromSourceIO`
187 (replacing `ToStreamGenerator` and `BuildFromStream`).
188 There are instances for *conduit*, *pipes* and *machines* in new packages:
189 [servant-conduit](https://hackage.haskell.org/package/servant-conduit)
190 [servant-pipes](https://hackage.haskell.org/package/servant-pipes) and
191 [servant-machines](https://hackage.haskell.org/package/servant-machines)
192 respectively.
194 Writing new framing strategies is simpler. Check existing strategies for examples.
196 This change shouldn't affect you, if you don't use streaming endpoints.
198- *servant-client* Separate streaming client.
199 [#1066](https://github.com/haskell-servant/servant/pull/1066)
201 We now have two `http-client` based clients,
202 in `Servant.Client` and `Servant.Client.Streaming`.
204 Their API is the same, except for
205 - `Servant.Client` **cannot** request `Stream` endpoints.
206 - `Servant.Client` is *run* by direct
207 `runClientM :: ClientM a -> ClientEnv -> IO (Either ServantError a)`
208 - `Servant.Client.Streaming` **can** request `Stream` endpoints.
209 - `Servant.Client.Streaming` is *used* by CPSised
210 `withClientM :: ClientM a -> ClientEnv -> (Either ServantError a -> IO b) -> IO b`
212 To access `Stream` endpoints use `Servant.Client.Streaming` with
213 `withClientM`; otherwise you can continue using `Servant.Client` with `runClientM`.
214 You can use both too, `ClientEnv` and `BaseUrl` types are same for both.
216 **Note:** `Servant.Client.Streaming` doesn't *stream* non-`Stream` endpoints.
217 Requesting ordinary `Verb` endpoints (e.g. `Get`) will block until
218 the whole response is received.
220 There is `Servant.Client.Streaming.runClientM` function, but it has
221 restricted type. `NFData a` constraint prevents using it with
222 `SourceT`, `Conduit` etc. response types.
224 ```haskell
225 runClientM :: NFData a => ClientM a -> ClientEnv -> IO (Either ServantError a)
226 ```
228 This change shouldn't affect you, if you don't use streaming endpoints.
230- Drop support for GHC older than 8.0
231 [#1008](https://github.com/haskell-servant/servant/pull/1008)
232 [#1009](https://github.com/haskell-servant/servant/pull/1009)
234- *servant-client-core* Add `NFData (GenResponse a)` and `NFData ServantError` instances.
235 [#1076](https://github.com/haskell-servant/servant/pull/1076)
237 *servant-client-core* Add `aeson` and `Lift BaseUrl` instances
238 [#1037](https://github.com/haskell-servant/servant/pull/1037)
2400.14
241----
243- `Stream` takes a status code argument
245 ```diff
246 -Stream method framing ctype a
247 +Stream method status framing ctype a
248 ```
250 ([#966](https://github.com/haskell-servant/servant/pull/966)
251 [#972](https://github.com/haskell-servant/servant/pull/972))
253- `ToStreamGenerator` definition changed, so it's possible to write an instance
254 for conduits.
256 ```diff
257 -class ToStreamGenerator f a where
258 - toStreamGenerator :: f a -> StreamGenerator a
259 +class ToStreamGenerator a b | a -> b where
260 + toStreamGenerator :: a -> StreamGenerator b
261 ```
263 ([#959](https://github.com/haskell-servant/servant/pull/959))
265- Added `NoFraming` streaming strategy
266 ([#959](https://github.com/haskell-servant/servant/pull/959))
268- *servant-client-core* Add `hoistClient` to `HasClient`.
269 Just like `hoistServer` allows us to change the monad in which request handlers
270 of a web application live, we also have `hoistClient` for changing the monad
271 in which *client functions* live.
272 Read [tutorial section for more information](https://docs.servant.dev/en/release-0.14/tutorial/Client.html#changing-the-monad-the-client-functions-live-in).
273 ([#936](https://github.com/haskell-servant/servant/pull/936))
275- *servant-client* Add more constructors to `RequestBody`, including
276 `RequestBodyStream`.
277 *Note:* we are looking for http-library agnostic API,
278 so the might change again soon.
279 Tell us which constructors are useful for you!
280 ([#913](https://github.com/haskell-servant/servant/pull/913))
2820.13.0.1
283--------
285- Support `base-compat-0.10`
2870.13
288----
290- Streaming endpoint support.
291 ([#836](https://github.com/haskell-servant/servant/pull/836))
292- *servant* Add `Servant.API.Modifiers`
293 ([#873](https://github.com/haskell-servant/servant/pull/873))
294- *servant-client* Support `http-client`’s `CookieJar`
295 ([#897](https://github.com/haskell-servant/servant/pull/897)
296 [#883](https://github.com/haskell-servant/servant/pull/883))
2980.12.0.1
299--------
301- Send `Accept` header.
302 ([#858](https://github.com/haskell-servant/servant/issues/858))
3040.12
305----
307- Factored out into `servant-client-core` all the functionality that was
308 independent of the `http-client` backend.
3100.11
311----
313### Other changes
315- Path components are escaped
316 ([#696](https://github.com/haskell-servant/servant/pull/696))
317- `Req` `reqPath` field changed from `String` to `BS.Builder`
318 ([#696](https://github.com/haskell-servant/servant/pull/696))
319- Include `Req` in failure errors
320 ([#740](https://github.com/haskell-servant/servant/pull/740))
3220.10
323-----
325### Breaking changes
327There shouldn't be breaking changes. Released as a part of `servant` suite.
329### Other changes
331* Add MonadBase and MonadBaseControl instances for ClientM
332 ([#663](https://github.com/haskell-servant/servant/issues/663))
334* client asks for any content-type in Accept contentTypes non-empty list
335 ([#615](https://github.com/haskell-servant/servant/pull/615))
337* Add `ClientLike` class that matches client functions generated using `client`
338 with client data structure.
339 ([#640](https://github.com/haskell-servant/servant/pull/640))
341* Allow direct use of 'RequestBody'
342 ([#661](https://github.com/haskell-servant/servant/pull/661))
3440.9.1.1
345-------
347* Add MonadThrow and MonadCatch instances for ClientM
3490.9
350---
352* BACKWARDS INCOMPATIBLE: `client` now returns a ClientM which is a Reader for
353 BasicEnv. BasicEnv comprises the HttpManager and BaseUrl that have had to be
354 passed to each method returned by `client`.
3560.7.1
357-----
359* Support GHC 8.0
360* `ServantError` has an `Eq` instance now.
3620.6
363---
365* `client` no longer takes `BaseUrl` and `Manager` arguments. Instead, each function returned by `client` requires these two arguments.
3670.5
368---
370* Use the `text` package instead of `String`.
371* Support for the `HttpVersion`, `IsSecure`, `RemoteHost` and `Vault` combinators
372* Added support for `path` on `BaseUrl`.
373* `client` now takes an explicit `Manager` argument.
374* Use `http-api-data` instead of `Servant.Common.Text`
375* Client functions now consider any 2xx successful.
376* Remove matrix params.
377* Added support for Basic authentication
378* Add generalized authentication support via the `AuthClientData` type family and
379 `AuthenticateReq` data type
3810.4.1
382-----
383* The `HasClient` instance for `Delete cts ()` now does not care at all about content types provided.
3850.4
386---
387* `Delete` now is like `Get`, `Post`, `Put`, and `Patch` and returns a response body
388* Support content-type aware combinators and `Accept`/`Content-type` headers
389* Added a lot of tests
390* Support multiple concurrent threads
391* Use `ServantError` to report Errors instead of `String`
392* Make the clients for `Raw` endpoints return the whole `Response` value (to be able to access response headers for example)
393* Support for PATCH
394* Make () instances expect No Content status code, and not try to decode body.
395* Add support for response headers
3970.2.2
398-----
399* Add TLS support
400* Add matrix parameter support