2017-11-06 09:40:39 +01:00
[The latest version of this document is on GitHub. ](https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md )
2018-07-04 21:59:43 +02:00
0.14.1
------
- Merge in (and slightly refactor) `servant-generic`
(by [Patrick Chilton ](https://github.com/chpatrick ))
into `servant` (`Servant.API.Generic`),
`servant-client-code` (`Servant.Client.Generic`)
and `servant-server` (`Servant.Server.Generic`).
- Deprecate `Servant.Utils.Links` , use `Servant.Links` .
- *servant-server* Deprecate `Servant.Utils.StaticUtils` , use `Servant.Server.StaticUtils` .
2018-06-12 17:05:32 +02:00
0.14
----
### Signifacant changes
- `Stream` takes a status code argument
```diff
-Stream method framing ctype a
+Stream method status framing ctype a
```
([#966](https://github.com/haskell-servant/servant/pull/966)
[#972 ](https://github.com/haskell-servant/servant/pull/972 ))
- `ToStreamGenerator` definition changed, so it's possible to write an instance
for conduits.
```diff
-class ToStreamGenerator f a where
- toStreamGenerator :: f a -> StreamGenerator a
+class ToStreamGenerator a b | a -> b where
+ toStreamGenerator :: a -> StreamGenerator b
```
([#959](https://github.com/haskell-servant/servant/pull/959))
- Added `NoFraming` streaming strategy
([#959](https://github.com/haskell-servant/servant/pull/959))
2018-06-18 16:12:35 +02:00
- *servant-client-core* Free `Client` implementation.
2018-06-12 17:05:32 +02:00
Useful for testing `HasClient` instances.
([#920](https://github.com/haskell-servant/servant/pull/920))
2018-06-18 16:12:35 +02:00
- *servant-client-core* Add `hoistClient` to `HasClient` .
2018-06-12 17:05:32 +02:00
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
2018-06-12 20:26:33 +02:00
in which *client functions* live.
Read [tutorial section for more information ](https://haskell-servant.readthedocs.io/en/release-0.14/tutorial/Client.html#changing-the-monad-the-client-functions-live-in ).
2018-06-12 17:05:32 +02:00
([#936](https://github.com/haskell-servant/servant/pull/936))
2018-06-12 21:05:06 +02:00
iF you have own combinators, you'll need to define a new method of
`HasClient` class, for example:
```haskell
type Client m (MyCombinator :> api) = MyValue :> Client m api
hoistClientMonad pm _ nt cl = hoistClientMonad pm (Proxy :: Proxy api) nt . cl
```
2018-06-12 17:05:32 +02:00
- *servant* Add `safeLink' :: (Link -> a) -> ... -> MkLink endpoint a` ,
which allows to create helpers returning something else than `Link` .
([#968](https://github.com/haskell-servant/servant/pull/968))
- *servant-server* File serving in polymorphic monad.
i.e. Generalised types of `serveDirectoryFileServer` etc functions in
`Servant.Utils.StaticFiles`
([#953](https://github.com/haskell-servant/servant/pull/953))
- *servant-server* `ReqBody` content type check is recoverable.
This allows writing APIs like:
```haskell
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](https://github.com/haskell-servant/servant/pull/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](https://github.com/haskell-servant/servant/pull/913))
### Other changes
- `GetHeaders` instances implemented without `OverlappingInstances`
([#971](https://github.com/haskell-servant/servant/pull/971))
- Added tests or enabled tests
([#975](https://github.com/haskell-servant/servant/pull/975))
2018-06-12 20:26:33 +02:00
- Add [pagination cookbook recipe ](https://haskell-servant.readthedocs.io/en/release-0.14/cookbook/pagination/Pagination.html )
2018-06-12 17:05:32 +02:00
([#946](https://github.com/haskell-servant/servant/pull/946))
2018-06-12 20:26:33 +02:00
- Add [`servant-flatten` "spice" to the structuring api recipe ](https://haskell-servant.readthedocs.io/en/release-0.14/cookbook/structuring-apis/StructuringApis.html )
2018-06-12 17:05:32 +02:00
([#929](https://github.com/haskell-servant/servant/pull/929))
- Dependency updates
([#900](https://github.com/haskell-servant/servant/pull/900)
[#919 ](https://github.com/haskell-servant/servant/pull/919 )
[#924 ](https://github.com/haskell-servant/servant/pull/924 )
[#943 ](https://github.com/haskell-servant/servant/pull/943 )
[#964 ](https://github.com/haskell-servant/servant/pull/964 )
[#967 ](https://github.com/haskell-servant/servant/pull/967 )
[#976 ](https://github.com/haskell-servant/servant/pull/976 ))
- Documentation updates
[#963 ](https://github.com/haskell-servant/servant/pull/963 )
[#960 ](https://github.com/haskell-servant/servant/pull/960 )
[#908 ](https://github.com/haskell-servant/servant/pull/908 )
[#958 ](https://github.com/haskell-servant/servant/pull/958 )
[#948 ](https://github.com/haskell-servant/servant/pull/948 )
[#928 ](https://github.com/haskell-servant/servant/pull/928 )
[#921 ](https://github.com/haskell-servant/servant/pull/921 ))
- Development process improvements
([#680](https://github.com/haskell-servant/servant/pull/680)
[#917 ](https://github.com/haskell-servant/servant/pull/917 )
[#923 ](https://github.com/haskell-servant/servant/pull/923 )
[#961 ](https://github.com/haskell-servant/servant/pull/961 )
[#973 ](https://github.com/haskell-servant/servant/pull/973 ))
### Note
(VIM) Regular-expression to link PR numbers: `s/\v#(\d+)/[#\1](https:\/\/github.com\/haskell-servant\/servant/pull\/\1)/`
2018-04-09 11:26:35 +02:00
0.13.0.1
--------
- Support `base-compat-0.10`
2018-02-08 11:29:16 +01:00
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`
2018-02-09 11:05:30 +01:00
([#873](https://github.com/haskell-servant/servant/pull/873)
[#903 ](https://github.com/haskell-servant/servant/pull/903 ))
2018-02-08 11:29:16 +01:00
`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)
2018-02-09 11:05:30 +01:00
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 )
2018-02-08 11:29:16 +01:00
- *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 ))
2017-12-18 18:54:39 +01:00
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 ))
2017-11-06 09:40:39 +01:00
0.12
2017-06-02 17:18:42 +02:00
---
2017-11-06 09:40:39 +01:00
### 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 ))
2017-11-08 09:17:59 +01:00
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.
2017-11-06 09:40:39 +01:00
- *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 ))
2017-11-08 09:17:59 +01:00
`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.
2017-11-06 09:40:39 +01:00
- Add `Description` and `Summary` combinators
([#767](https://github.com/haskell-servant/servant/pull/767))
2017-11-08 09:17:59 +01:00
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
2017-06-02 17:18:42 +02:00
- Lower `:>` and `:<|>` infix precedence to 4 and 3 respectively
([#761](https://github.com/haskell-servant/servant/issues/761))
2017-11-08 11:49:47 +01:00
This shouldn't affect you, except if you define your own infix operators
2017-11-08 09:17:59 +01:00
for Servant type-level DSL.
2017-11-06 09:40:39 +01:00
### Other changes
2017-11-06 11:35:43 +01:00
- *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 ))
2017-11-07 17:49:30 +01:00
- Add `addLinks` to generate all links for unnested APIs.
([#851](https://github.com/haskell-servant/servant/pull/851))
2017-11-06 09:40:39 +01:00
- 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 ))
2017-05-14 20:41:39 +02:00
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 ))
2016-11-18 17:41:34 +01:00
0.10
2017-05-14 20:41:39 +02:00
----
2016-11-18 17:41:34 +01:00
2017-02-01 08:06:30 +01:00
### Breaking changes
2016-11-18 17:41:34 +01:00
* Use `NT` from `natural-transformation` for `Enter`
2017-01-16 09:09:40 +01:00
([#616](https://github.com/haskell-servant/servant/issues/616))
2016-11-18 17:41:34 +01:00
2017-01-16 09:31:18 +01:00
* Change to `MkLink (Verb ...) = Link` (previously `URI` ). To consume `Link`
2017-01-16 09:46:28 +01:00
use its `ToHttpApiData` instance or `linkURI` .
2017-01-16 09:31:18 +01:00
([#527](https://github.com/haskell-servant/servant/issues/527))
2017-02-01 08:06:30 +01:00
### Other changes
2017-01-16 12:59:24 +01:00
* Add `Servant.API.TypeLevel` module with type families to work with API types.
2017-01-30 07:45:58 +01:00
([#345](https://github.com/haskell-servant/servant/pull/345)
, [#305 ](https://github.com/haskell-servant/servant/issues/305 ))
2017-01-16 12:59:24 +01:00
2017-01-16 11:13:48 +01:00
* 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 )
2017-01-30 07:45:58 +01:00
* `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 ))
2016-10-26 17:35:57 +02:00
0.9.1
------
2016-10-24 17:15:29 +02:00
* Added 'noHeader' function for *not* adding response headers.
2016-09-17 17:46:26 +02:00
0.9
---
2016-09-07 17:31:54 +02:00
* Added Eq, Show, Read, Generic and Ord instances to IsSecure
2016-09-17 17:46:26 +02:00
* 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`
2016-09-07 17:31:54 +02:00
2016-09-02 18:09:47 +02:00
0.8.1
2016-08-17 13:37:53 +02:00
----
* Add `CaptureAll` combinator. Captures all of the remaining segments in a URL.
2016-08-22 16:27:33 +02:00
* Add `Servant.API.TypeLevel` module, with frequently used type-level
functionaliy.
2016-08-17 13:37:53 +02:00
2016-07-10 14:10:27 +02:00
0.8
---
* Minor fixes, documentation changes and cabal tweaks
2016-05-10 16:16:37 +02:00
0.7.1
2016-05-05 05:31:08 +02:00
-----
2016-05-10 16:16:37 +02:00
* Add module `Servant.Utils.Enter` (https://github.com/haskell-servant/servant/pull/478)
2016-05-05 05:31:08 +02:00
* Allow to set the same header multiple times in responses.
2016-05-10 16:16:37 +02:00
2016-03-19 13:26:13 +01:00
0.5
2016-05-05 05:31:08 +02:00
---
2015-06-23 10:34:20 +02:00
2016-01-18 22:34:56 +01:00
* Add `WithNamedConfig` combinator.
2015-06-23 10:34:20 +02:00
* Add `HttpVersion` , `IsSecure` , `RemoteHost` and `Vault` combinators
2015-07-21 15:22:56 +02:00
* Fix safeLink, so Header is not in fact required.
2015-10-08 00:15:30 +02:00
* Add more instances for (:< |>)
* Use `http-api-data` instead of `Servant.Common.Text`
2015-10-13 21:46:52 +02:00
* Remove matrix params.
2015-09-09 23:17:17 +02:00
* Add PlainText String MimeRender and MimeUnrender instances.
2015-12-27 14:47:05 +01:00
* Add new `Verbs` combinator, and make all existing and new verb combinators
type synonyms of it.
2016-02-17 20:25:34 +01:00
* Add `BasicAuth` combinator to support Basic authentication
2016-02-17 21:57:04 +01:00
* Add generalized authentication support
2015-06-23 10:34:20 +02:00
2015-06-05 12:18:01 +02:00
0.4.2
-----
* Fix missing cases for `Patch` in `safeLink`
2015-05-27 15:33:25 +02:00
0.4.1
-----
* Allow whitespace after parsing JSON
* Stricter matching for `safeLink` for `Capture`
2015-05-09 02:28:05 +02:00
0.4
2015-03-04 01:47:47 +01:00
---
2015-05-07 13:22:01 +02:00
* `Delete` now is like `Get` , `Post` , `Put` , and `Patch` and returns a response body
2015-03-04 01:47:47 +01:00
* 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
2015-04-13 15:12:33 +02:00
* Some general code cleanup
* Add response headers