@@ -1,6 +1,81 @@
11[The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant-client-core/CHANGELOG.md)
22[Changelog for `servant` package contains significant entries for all core packages.](https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md)
33
4+0.15
5+----
6+
7+- Streaming refactoring.
8+ [#991](https://github.com/haskell-servant/servant/pull/991)
9+ [#1076](https://github.com/haskell-servant/servant/pull/1076)
10+ [#1077](https://github.com/haskell-servant/servant/pull/1077)
11+
12+ The streaming functionality (`Servant.API.Stream`) is refactored to use
13+ `servant`'s own `SourceIO` type (see `Servant.Types.SourceT` documentation),
14+ which replaces both `StreamGenerator` and `ResultStream` types.
15+
16+ New conversion type-classes are `ToSourceIO` and `FromSourceIO`
17+ (replacing `ToStreamGenerator` and `BuildFromStream`).
18+ There are instances for *conduit*, *pipes* and *machines* in new packages:
19+ [servant-conduit](https://hackage.haskell.org/package/servant-conduit)
20+ [servant-pipes](https://hackage.haskell.org/package/servant-pipes) and
21+ [servant-machines](https://hackage.haskell.org/package/servant-machines)
22+ respectively.
23+
24+ Writing new framing strategies is simpler. Check existing strategies for examples.
25+
26+ This change shouldn't affect you, if you don't use streaming endpoints.
27+
28+- *servant-client* Separate streaming client.
29+ [#1066](https://github.com/haskell-servant/servant/pull/1066)
30+
31+ We now have two `http-client` based clients,
32+ in `Servant.Client` and `Servant.Client.Streaming`.
33+
34+ Their API is the same, except for
35+ - `Servant.Client` **cannot** request `Stream` endpoints.
36+ - `Servant.Client` is *run* by direct
37+ `runClientM :: ClientM a -> ClientEnv -> IO (Either ServantError a)`
38+ - `Servant.Client.Streaming` **can** request `Stream` endpoints.
39+ - `Servant.Client.Streaming` is *used* by CPSised
40+ `withClientM :: ClientM a -> ClientEnv -> (Either ServantError a -> IO b) -> IO b`
41+
42+ To access `Stream` endpoints use `Servant.Client.Streaming` with
43+ `withClientM`; otherwise you can continue using `Servant.Client` with `runClientM`.
44+ You can use both too, `ClientEnv` and `BaseUrl` types are same for both.
45+
46+ **Note:** `Servant.Client.Streaming` doesn't *stream* non-`Stream` endpoints.
47+ Requesting ordinary `Verb` endpoints (e.g. `Get`) will block until
48+ the whole response is received.
49+
50+ There is `Servant.Client.Streaming.runClientM` function, but it has
51+ restricted type. `NFData a` constraint prevents using it with
52+ `SourceT`, `Conduit` etc. response types.
53+
54+ ```haskell
55+ runClientM :: NFData a => ClientM a -> ClientEnv -> IO (Either ServantError a)
56+ ```
57+
58+ This change shouldn't affect you, if you don't use streaming endpoints.
59+
60+- *servant-client-core* Related to the previous:
61+ `streamingResponse` is removed from `RunClient`.
62+ We have a new type-class:
63+
64+ ```haskell
65+ class RunClient m => RunStreamingClient m where
66+ withStreamingRequest :: Request -> (StreamingResponse -> IO a) -> m a
67+ ```
68+
69+- Drop support for GHC older than 8.0
70+ [#1008](https://github.com/haskell-servant/servant/pull/1008)
71+ [#1009](https://github.com/haskell-servant/servant/pull/1009)
72+
73+- *servant-client-core* Add `NFData (GenResponse a)` and `NFData ServantError` instances.
74+ [#1076](https://github.com/haskell-servant/servant/pull/1076)
75+
76+- *servant-client-core* Add `aeson` and `Lift BaseUrl` instances
77+ [#1037](https://github.com/haskell-servant/servant/pull/1037)
78+
4790.14.1
580------
681