@@ -1,5 +1,137 @@
11[The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md)
22
3+0.15
4+----
5+
6+### Significant changes
7+
8+- Streaming refactoring. [#991](https://github.com/haskell-servant/servant/pull/991)
9+
10+ The streaming functionality (`Servant.API.Stream`) is refactored to use
11+ `servant` own `SourceIO` type (see `Servant.Types.SourceT` documentation),
12+ which replaces both `StreamGenerator` and `ResultStream` types.
13+
14+ New conversion type-classes are `ToSourceIO` and `FromSourceIO`
15+ (replacing `ToStreamGenerator` and `BuildFromStream`).
16+ There are instances for *conduit*, *pipes* and *machines* in new packages:
17+ [servant-conduit](https://hackage.haskell.org/package/servant-conduit)
18+ [servant-pipes](https://hackage.haskell.org/package/servant-pipes) and
19+ [servant-machines](https://hackage.haskell.org/package/servant-machines)
20+ respectively.
21+
22+ Writing new framing strategies is simpler. Check existing strategies for examples.
23+
24+ This change shouldn't affect you, if you don't use streaming endpoints.
25+
26+- *servant-client* Separate streaming client. [#1066](https://github.com/haskell-servant/servant/pull/1066)
27+
28+ We now have two `http-client` based clients,
29+ in `Servant.Client` and `Servant.Client.Streaming`.
30+
31+ Their API is the same, except for
32+ - `Servant.Client` **cannot** request `Stream` endpoints.
33+ - `Servant.Client` is *run* by direct
34+ `runClientM :: ClientM a -> ClientEnv -> IO (Either ServantError a)`
35+ - `Servant.Client.Streaming` **can** request `Stream` endpoints.
36+ - `Servant.Client.Streaming` is *used* by CPSised
37+ `withClientM :: ClientM a -> ClientEnv -> (Either ServantError a -> IO b) -> IO b`
38+
39+ If you need to access `Stream` endpoints use `Servant.Client.Streaming` with
40+ `withClientM`; otherwise you can continue using `Servant.Client` with `runClientM`.
41+ You can use both too, `ClientEnv` and `BaseUrl` types are same for both.
42+
43+ **Note:** `Servant.Client.Streaming` doesn't *stream* non-`Stream` endpoints.
44+ Requesting ordinary `Verb` endpoints (e.g. `Get`) will block until
45+ the whole response is received.
46+
47+ This change shouldn't affect you, if you don't use streaming endpoints.
48+
49+- Drop support for GHC older than 8.0
50+ [#1008](https://github.com/haskell-servant/servant/pull/1008)
51+ [#1009](https://github.com/haskell-servant/servant/pull/1009)
52+
53+- `ComprehensiveAPI` is a part of public API in `Servant.Test.ComprehensiveAPI`` module.
54+ This API type is used to verify that libraries implement all core combinators.
55+ Now we won't change this type between major versions.
56+ (This has been true for some time already).
57+ [#1070](https://github.com/haskell-servant/servant/pull/1070)
58+
59+- Remove `Servant.Utils.Enter` module
60+ (deprecated in `servant-0.12` in favour of `hoistServer`)
61+ [#996](https://github.com/haskell-servant/servant/pull/996)
62+
63+### Other changes
64+
65+- *servant* Add `lookupResponseHeader :: ... => Headers headers r -> ResponseHeader h a`
66+ [#1064](https://github.com/haskell-servant/servant/pull/1064)
67+
68+- *servant-foreign* Add support so `HasForeign` can be implemented for
69+ `MultipartForm` from [`servant-multipart`](http://hackage.haskell.org/package/servant-multipart)
70+ [#1035](https://github.com/haskell-servant/servant/pull/1035)
71+
72+- *servant-server* Add `MonadMask Handler`
73+ [#1068](https://github.com/haskell-servant/servant/pull/1068)
74+
75+- *servant-docs* Fix markdown indentation
76+ [#1043](https://github.com/haskell-servant/servant/pull/1043)
77+
78+- *servant* Export `GetHeaders'`
79+ [#1052](https://github.com/haskell-servant/servant/pull/1052)
80+
81+- *servant* Add `Bitraversable` and other `Bi-` instances for `:<|>`
82+ [#1032](https://github.com/haskell-servant/servant/pull/1032)
83+
84+- *servant* Add `PutCreated` method type alias
85+ [#1024](https://github.com/haskell-servant/servant/pull/1024)
86+
87+- *servant-client-core* Add `aeson` and `Lift BaseUrl` instances
88+ [#1037](https://github.com/haskell-servant/servant/pull/1037)
89+
90+- Add `ToSourceIO (NonEmpty a)` instance
91+ [#988](https://github.com/haskell-servant/servant/pull/988)
92+
93+- Development process improvements
94+ - Apply `stylish-haskell` to all modules
95+ [#1001](https://github.com/haskell-servant/servant/pull/1001)
96+ - Amend `CONTRIBUTING.md`
97+ [#1036](https://github.com/haskell-servant/servant/pull/1036)
98+ - `servant-docs` has golden tests for `ComprehensiveAPI`
99+ [#1071](https://github.com/haskell-servant/servant/pull/1071)
100+ - Other
101+ [#1039](https://github.com/haskell-servant/servant/pull/1039)
102+ [#1046](https://github.com/haskell-servant/servant/pull/1046)
103+ [#1062](https://github.com/haskell-servant/servant/pull/1062)
104+ [#1069](https://github.com/haskell-servant/servant/pull/1069)
105+ [#985](https://github.com/haskell-servant/servant/pull/985)
106+
107+- *Documentation* Tutorial and new recipes
108+ - [Using free client](https://haskell-servant.readthedocs.io/en/latest/cookbook/using-free-client/UsingFreeClient.html)
109+ [#1005](https://github.com/haskell-servant/servant/pull/1005)
110+ - [Generating mock curl calls](https://haskell-servant.readthedocs.io/en/latest/cookbook/curl-mock/CurlMock.html)
111+ [#1033](https://github.com/haskell-servant/servant/pull/1033)
112+ - [Error logging with Sentry](https://haskell-servant.readthedocs.io/en/latest/cookbook/sentry/Sentry.html)
113+ [#987](https://github.com/haskell-servant/servant/pull/987)
114+ - [Hoist Server With Context for Custom Monads](https://haskell-servant.readthedocs.io/en/latest/cookbook/hoist-server-with-context/HoistServerWithContext.html)
115+ [#1044](https://github.com/haskell-servant/servant/pull/1044)
116+ - [How To Test Servant Applications](https://haskell-servant.readthedocs.io/en/latest/cookbook/testing/Testing.html)
117+ [#1050](https://github.com/haskell-servant/servant/pull/1050)
118+ - `genericServeT`: using custom monad with `Servant.API.Generic`
119+ in [Using generics](https://haskell-servant.readthedocs.io/en/latest/cookbook/generic/Generic.html)
120+ [#1058](https://github.com/haskell-servant/servant/pull/1058)
121+ - Tutorial
122+ [#974](https://github.com/haskell-servant/servant/pull/974)
123+ [#1007](https://github.com/haskell-servant/servant/pull/1007)
124+ - miscellanea: fixed typos etc.
125+ [#1030](https://github.com/haskell-servant/servant/pull/1030)
126+ [#1020](https://github.com/haskell-servant/servant/pull/1020)
127+ [#1059](https://github.com/haskell-servant/servant/pull/1059)
128+
129+- *Documentation* README
130+ [#1010](https://github.com/haskell-servant/servant/pull/1010)
131+
132+- *servant-client-ghcjs* updates. **note** package is not released on Hackage
133+ [#938](https://github.com/haskell-servant/servant/pull/938)
134+
31350.14.1
4136------
5137
@@ -10,6 +142,7 @@
10142 and `servant-server` (`Servant.Server.Generic`).
11143
12144- Deprecate `Servant.Utils.Links`, use `Servant.Links`.
145+ [#998](https://github.com/haskell-servant/servant/pull/998)
13146
14147- *servant-server* Deprecate `Servant.Utils.StaticUtils`, use `Servant.Server.StaticUtils`.
15148