packages feed

servant-0.13: CHANGELOG.md

[The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md)

0.13
----

### Significant changes

- Streaming endpoint support.
  ([#836](https://github.com/haskell-servant/servant/pull/836))

  ```haskell
  type StreamApi f = "streamGetNewline" :> StreamGet NewlineFraming JSON (f Person)
  ```

  See tutorial for more details
  - [A web API as a type - StreamGet and StreamPost](http://haskell-servant.readthedocs.io/en/release-0.13/tutorial/ApiType.html#streamget-and-streampost)
  - [Serving an API - streaming endpoints](http://haskell-servant.readthedocs.io/en/release-0.13/tutorial/Server.html#streaming-endpoints)
  - [Querying an API - Querying Streaming APIs](http://haskell-servant.readthedocs.io/en/release-0.13/tutorial/Client.html#querying-streaming-apis)

- *servant* Add `Servant.API.Modifiers`
  ([#873](https://github.com/haskell-servant/servant/pull/873)
   [#903](https://github.com/haskell-servant/servant/pull/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.](https://github.com/haskell-servant/servant/issues/902)

- *servant-client* Support `http-client`’s `CookieJar`
  ([#897](https://github.com/haskell-servant/servant/pull/897)
   [#883](https://github.com/haskell-servant/servant/pull/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](https://github.com/haskell-servant/servant/issues/887)
   [#890](https://github.com/haskell-servant/servant/pull/890))

- *servant* Add `TypeError ... => HasServer`s instances in GHC-8.2 for
  not saturated modifiers (`Capture "foo" :> ...`) or `->` in place of `:>`.
  ([#893](https://github.com/haskell-servant/servant/pull/893))

- *Cookbook* example projects at
  http://haskell-servant.readthedocs.io/en/master/cookbook/index.html
  ([#867](https://github.com/haskell-servant/servant/pull/867)
   [#892](https://github.com/haskell-servant/servant/pull/882))

- *Experimental work* `servant-client-ghcjs`
  ([#818](https://github.com/haskell-servant/servant/pull/818)
   [#869](https://github.com/haskell-servant/servant/pull/869))

### Other changes

- *servant* Links aren't double escaped
  ([#878](https://github.com/haskell-servant/servant/pull/878))

- Dependency updates
  ([#900](https://github.com/haskell-servant/servant/pull/900)
   [#898](https://github.com/haskell-servant/servant/pull/898)
   [#895](https://github.com/haskell-servant/servant/pull/895)
   [#872](https://github.com/haskell-servant/servant/pull/872))

- Documentation updates
  ([#875](https://github.com/haskell-servant/servant/pull/875)
   [#861](https://github.com/haskell-servant/servant/pull/861))

- Refactorings
  ([#899](https://github.com/haskell-servant/servant/pull/899)
   [#896](https://github.com/haskell-servant/servant/pull/896)
   [#889](https://github.com/haskell-servant/servant/pull/889)
   [#891](https://github.com/haskell-servant/servant/pull/891)
   [#892](https://github.com/haskell-servant/servant/pull/892)
   [#885](https://github.com/haskell-servant/servant/pull/885))

0.12.1
------

### Bug fixes

- Prevent double-escaping in link segments
  ([#835](https://github.com/haskell-servant/servant/issues/835)
   [#878](https://github.com/haskell-servant/servant/pull/878))

0.12
---

### Significant changes

- *servant-client* *servant-client-core*
  Factored out of `servant-client` all the functionality that was
  independent of the `http-client` backend.
  ([#803](https://github.com/haskell-servant/servant/pull/803)
   [#821](https://github.com/haskell-servant/servant/issues/821))

  If you have own combinators, you'll need to add an additional `m` argument
  in `HasClient`, `Client` and `clientWithRoute`:

  ```diff
  -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](https://github.com/haskell-servant/servant/pull/804)
   [#824](https://github.com/haskell-servant/servant/pull/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`:

  ```diff
  -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:

  ```haskell
  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](https://github.com/haskell-servant/servant/pull/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](https://github.com/haskell-servant/servant/issues/761))

  This shouldn't affect you, except if you define your own infix operators
  for Servant type-level DSL.

### Other changes

- *servant-foreign* Derive `Data` for all types
  ([#809](https://github.com/haskell-servant/servant/pull/809))
- *servant-docs* Add authentication lenses
  ([#787](https://github.com/haskell-servant/servant/pull/787))
- *servant-docs* Generated markdown improvements
  ([#813](https://github.com/haskell-servant/servant/pull/787)
   [#767](https://github.com/haskell-servant/servant/pull/767)
   [#790](https://github.com/haskell-servant/servant/pull/790)
   [#788](https://github.com/haskell-servant/servant/pull/788))
- Add `addLinks` to generate all links for unnested APIs.
  ([#851](https://github.com/haskell-servant/servant/pull/851))
- Allow newest dependencies
 ([#772](https://github.com/haskell-servant/servant/pull/772)
  [#842](https://github.com/haskell-servant/servant/pull/842))
- Documentation improvements and typo fixes
 ([#757](https://github.com/haskell-servant/servant/pull/757)
  [#771](https://github.com/haskell-servant/servant/pull/771)
  [#775](https://github.com/haskell-servant/servant/pull/775)
  [#790](https://github.com/haskell-servant/servant/pull/790)
  [#791](https://github.com/haskell-servant/servant/pull/791)
  [#806](https://github.com/haskell-servant/servant/pull/806))
- Development process improvements
  ([#764](https://github.com/haskell-servant/servant/pull/764)
   [#839](https://github.com/haskell-servant/servant/pull/839))

0.11
----

### Breaking changes

- `Enter` refactored
  ([#734](https://github.com/haskell-servant/servant/issues/734)
  , [#736](https://github.com/haskell-servant/servant/pull/736))

### Other changes

- Add a type representing an empty API
  ([#753](https://github.com/haskell-servant/servant/pull/753))
- Add `linkURI'` and `Link` accessors
  ([#745](https://github.com/haskell-servant/servant/pull/745)
  , [#717](https://github.com/haskell-servant/servant/pull/717)
  , [#715](https://github.com/haskell-servant/servant/issues/715))
- Prepare for GHC-8.2
  ([#722](https://github.com/haskell-servant/servant/pull/722))
- Add `HasLink AuthProtect` instance
  ([#720](https://github.com/haskell-servant/servant/pull/720))
- `AllCTRender [] ()` `TypeError` (use `NoContent`)
  ([#671](https://github.com/haskell-servant/servant/pull/671))
- Documentation improvements and typo fixes
  ([#702](https://github.com/haskell-servant/servant/pull/702)
  , [#709](https://github.com/haskell-servant/servant/pull/709)
  , [#716](https://github.com/haskell-servant/servant/pull/716)
  , [#725](https://github.com/haskell-servant/servant/pull/725)
  , [#727](https://github.com/haskell-servant/servant/pull/727))

0.10
----

### Breaking changes

* Use `NT` from `natural-transformation` for `Enter`
  ([#616](https://github.com/haskell-servant/servant/issues/616))

* Change to `MkLink (Verb ...) = Link` (previously `URI`). To consume `Link`
  use its `ToHttpApiData` instance or `linkURI`.
  ([#527](https://github.com/haskell-servant/servant/issues/527))

### Other changes

* Add `Servant.API.TypeLevel` module with type families to work with API types.
  ([#345](https://github.com/haskell-servant/servant/pull/345)
  , [#305](https://github.com/haskell-servant/servant/issues/305))

* Default JSON content type change to `application/json;charset=utf-8`.
  ([#263](https://github.com/haskell-servant/servant/issues/263))
  Related browser bugs:
  [Chromium](https://bugs.chromium.org/p/chromium/issues/detail?id=438464) and
  [Firefox](https://bugzilla.mozilla.org/show_bug.cgi?id=918742)

* `Accept` class may accept multiple content-types. `MimeUnrender` adopted as well.
  ([#613](https://github.com/haskell-servant/servant/pull/614)
  , [#615](https://github.com/haskell-servant/servant/pull/615))

0.9.1
------

* Added 'noHeader' function for *not* adding response headers.

0.9
---

* Added Eq, Show, Read, Generic and Ord instances to IsSecure
* BACKWARDS INCOMPATIBLE: replace use of `ToFromByteString` with `To/FromHttpApiData` for `GetHeaders/BuildHeadersTo`
* BACKWARDS INCOMPATIBLE: Moved `From/ToFormUrlEncoded` classes, which were renamed to `From/ToForm` to `http-api-data`

0.8.1
----

* Add `CaptureAll` combinator. Captures all of the remaining segments in a URL.
* Add `Servant.API.TypeLevel` module, with frequently used type-level
functionaliy.

0.8
---

* Minor fixes, documentation changes and cabal tweaks

0.7.1
-----

* Add module `Servant.Utils.Enter` (https://github.com/haskell-servant/servant/pull/478)
* Allow to set the same header multiple times in responses.

0.5
---

* Add `WithNamedConfig` combinator.
* Add `HttpVersion`, `IsSecure`, `RemoteHost` and `Vault` combinators
* Fix safeLink, so Header is not in fact required.
* Add more instances for (:<|>)
* Use `http-api-data` instead of `Servant.Common.Text`
* Remove matrix params.
* Add PlainText String MimeRender and MimeUnrender instances.
* Add new `Verbs` combinator, and make all existing and new verb combinators
type synonyms of it.
* Add `BasicAuth` combinator to support Basic authentication
* Add generalized authentication support

0.4.2
-----
* Fix missing cases for `Patch` in `safeLink`

0.4.1
-----
* Allow whitespace after parsing JSON
* Stricter matching for `safeLink` for `Capture`

0.4
---
* `Delete` now is like `Get`, `Post`, `Put`, and `Patch` and returns a response body
* Multiple content-type/accept support for all the relevant combinators
* Provide *JSON*, *PlainText*, *OctetStream* and *FormUrlEncoded* content types out of the box
* Type-safe link generation to API endpoints
* Support for the PATCH HTTP method
* Removed the home-made QuasiQuote for writing API types in a more human-friendly format until we come up with a better design for it
* Make most if not all of the haddock code examples run through doctest
* Some general code cleanup
* Add response headers