servant/servant/CHANGELOG.md

693 lines
27 KiB
Markdown
Raw Normal View History

[The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md)
2019-08-03 15:19:37 +02:00
0.16.2
------
* `singleton-bool-0.1.5` (`SBool` is re-exported)
- Add `discreteBool :: Dec (a :~: b)` (GHC-7.8+)
- Add `Show`, `Eq`, `Ord` `SBool b` instances.
* dependencies update
2019-05-30 12:05:02 +02:00
0.16.1
------
* Add `Semigroup` and `Monoid` `SourceT` instances
[#1158](https://github.com/haskell-servant/servant/pull/1158)
[#1159](https://github.com/haskell-servant/servant/pull/1159)
* Use `http-api-data-0.4.1`
[#1181](https://github.com/haskell-servant/servant/pull/1181)
* Allow newer dependencies
2019-04-16 14:01:55 +02:00
0.16.0.1
--------
- Make tests work with `http-media-0.8`
2019-02-18 22:32:10 +01:00
0.16
2019-02-02 09:25:24 +01:00
----
2019-02-18 22:32:10 +01:00
### Significant changes
- Rename `ServantError` to `ClientError`, `ServantErr` to `ServerError`
[#1131](https://github.com/haskell-servant/servant/pull/1131)
2019-02-18 22:32:10 +01:00
- *servant-client-core* Rearrange modules. No more `Internal` modules, whole
API is versioned.
[#1130](https://github.com/haskell-servant/servant/pull/1130)
2019-02-18 22:32:10 +01:00
- *servant-http-streams* New package
[#1117](https://github.com/haskell-servant/servant/pull/1117)
2019-02-18 22:32:10 +01:00
- *servant-client-core* `RequestBody` is now
```haskell
= RequestBodyLBS LBS.ByteString
| RequestBodyBS BS.ByteString
| RequestBodySource (SourceIO LBS.ByteString)
```
i.e. no more replicates `http-client`s API.
[#1117](https://github.com/haskell-servant/servant/pull/1117)
2019-02-18 22:32:10 +01:00
- *servant-client-core* Keep structured exceptions in `ConnectionError`
constructor of `ClientError`
[#1115](https://github.com/haskell-servant/servant/pull/1115)
2019-02-18 22:32:10 +01:00
```diff
-| ConnectionError Text
+| ConnectionError SomeException
```
- *servant-client-core* Preserve failing request in `FailureResponse`
constructor of `ClientError`
[#1114](https://github.com/haskell-servant/servant/pull/1114)
2019-02-18 22:32:10 +01:00
```diff
-FailureResponse Response
+-- | The server returned an error response including the
+-- failing request. 'requestPath' includes the 'BaseUrl' and the
+-- path of the request.
+FailureResponse (RequestF () (BaseUrl, BS.ByteString)) Response
```
- *servant-client* Fix (implement) `StreamBody` instance
[#1110](https://github.com/haskell-servant/servant/pull/1110)
2019-02-18 22:32:10 +01:00
### Other changes
2019-02-02 09:25:24 +01:00
- *servant-client* Update CookieJar with intermediate request/responses (redirects)
[#1104](https://github.com/haskell-servant/servant/pull/1104)
- *servant-server* Reorder HTTP failure code priorities
[#1103](https://github.com/haskell-servant/servant/pull/1103)
2019-02-27 12:04:33 +01:00
- *servant-server* Re-organise internal modules
[#1139](https://github.com/haskell-servant/servant/pull/1139)
2019-02-18 22:32:10 +01:00
- Allow `network-3.0`
[#1107](https://github.com/haskell-servant/servant/pull/1107)
2019-02-18 22:32:10 +01:00
- Add `NFData NoContent` instance
[#1090](https://github.com/haskell-servant/servant/pull/1090)
2019-02-18 22:32:10 +01:00
- Documentation updates
[#1127](https://github.com/haskell-servant/servant/pull/1127)
[#1124](https://github.com/haskell-servant/servant/pull/1124)
[#1098](https://github.com/haskell-servant/servant/pull/1098)
2019-02-18 22:32:10 +01:00
- CI updates
[#1123](https://github.com/haskell-servant/servant/pull/1123)
[#1121](https://github.com/haskell-servant/servant/pull/1121)
[#1119](https://github.com/haskell-servant/servant/pull/1119)
2019-02-02 09:25:24 +01:00
2018-11-09 13:55:40 +01:00
0.15
----
### Significant changes
2018-11-09 20:52:20 +01:00
- Streaming refactoring.
[#991](https://github.com/haskell-servant/servant/pull/991)
[#1076](https://github.com/haskell-servant/servant/pull/1076)
[#1077](https://github.com/haskell-servant/servant/pull/1077)
2018-11-09 18:49:24 +01:00
2018-11-09 13:55:40 +01:00
The streaming functionality (`Servant.API.Stream`) is refactored to use
`servant`'s own `SourceIO` type (see `Servant.Types.SourceT` documentation),
2018-11-09 13:55:40 +01:00
which replaces both `StreamGenerator` and `ResultStream` types.
2018-11-09 18:49:24 +01:00
2018-11-09 13:55:40 +01:00
New conversion type-classes are `ToSourceIO` and `FromSourceIO`
(replacing `ToStreamGenerator` and `BuildFromStream`).
There are instances for *conduit*, *pipes* and *machines* in new packages:
[servant-conduit](https://hackage.haskell.org/package/servant-conduit)
[servant-pipes](https://hackage.haskell.org/package/servant-pipes) and
[servant-machines](https://hackage.haskell.org/package/servant-machines)
respectively.
Writing new framing strategies is simpler. Check existing strategies for examples.
This change shouldn't affect you, if you don't use streaming endpoints.
2018-11-09 20:52:20 +01:00
- *servant-client* Separate streaming client.
[#1066](https://github.com/haskell-servant/servant/pull/1066)
2018-11-09 13:55:40 +01:00
We now have two `http-client` based clients,
in `Servant.Client` and `Servant.Client.Streaming`.
Their API is the same, except for
- `Servant.Client` **cannot** request `Stream` endpoints.
- `Servant.Client` is *run* by direct
`runClientM :: ClientM a -> ClientEnv -> IO (Either ServantError a)`
- `Servant.Client.Streaming` **can** request `Stream` endpoints.
- `Servant.Client.Streaming` is *used* by CPSised
`withClientM :: ClientM a -> ClientEnv -> (Either ServantError a -> IO b) -> IO b`
2018-11-09 18:49:24 +01:00
To access `Stream` endpoints use `Servant.Client.Streaming` with
2018-11-09 13:55:40 +01:00
`withClientM`; otherwise you can continue using `Servant.Client` with `runClientM`.
You can use both too, `ClientEnv` and `BaseUrl` types are same for both.
**Note:** `Servant.Client.Streaming` doesn't *stream* non-`Stream` endpoints.
Requesting ordinary `Verb` endpoints (e.g. `Get`) will block until
the whole response is received.
2018-11-09 18:49:24 +01:00
There is `Servant.Client.Streaming.runClientM` function, but it has
restricted type. `NFData a` constraint prevents using it with
`SourceT`, `Conduit` etc. response types.
```haskell
runClientM :: NFData a => ClientM a -> ClientEnv -> IO (Either ServantError a)
```
2018-11-09 13:55:40 +01:00
This change shouldn't affect you, if you don't use streaming endpoints.
- *servant-client-core* Related to the previous:
`streamingResponse` is removed from `RunClient`.
We have a new type-class:
```haskell
class RunClient m => RunStreamingClient m where
withStreamingRequest :: Request -> (StreamingResponse -> IO a) -> m a
```
2018-11-09 13:55:40 +01:00
- Drop support for GHC older than 8.0
[#1008](https://github.com/haskell-servant/servant/pull/1008)
[#1009](https://github.com/haskell-servant/servant/pull/1009)
- *servant* `ComprehensiveAPI` is a part of public API in `Servant.Test.ComprehensiveAPI` module.
2018-11-09 18:49:24 +01:00
This API type is used to verify that libraries implement all core combinators.
2018-11-09 13:55:40 +01:00
Now we won't change this type between major versions.
(This has been true for some time already).
[#1070](https://github.com/haskell-servant/servant/pull/1070)
- *servant* Remove `Servant.Utils.Enter` module
2018-11-09 13:55:40 +01:00
(deprecated in `servant-0.12` in favour of `hoistServer`)
[#996](https://github.com/haskell-servant/servant/pull/996)
- *servant-foreign* Add support so `HasForeign` can be implemented for
`MultipartForm` from [`servant-multipart`](http://hackage.haskell.org/package/servant-multipart)
[#1035](https://github.com/haskell-servant/servant/pull/1035)
2018-11-09 13:55:40 +01:00
### Other changes
2018-11-09 18:49:24 +01:00
- *servant-client-core* Add `NFData (GenResponse a)` and `NFData ServantError` instances.
[#1076](https://github.com/haskell-servant/servant/pull/1076)
- *servant* NewlineFraming encodes newline after each element (i.e last)
[#1079](https://github.com/haskell-servant/servant/pull/1079)
[#1011](https://github.com/haskell-servant/servant/issues/1011)
2018-11-09 13:55:40 +01:00
- *servant* Add `lookupResponseHeader :: ... => Headers headers r -> ResponseHeader h a`
[#1064](https://github.com/haskell-servant/servant/pull/1064)
- *servant-server* Add `MonadMask Handler`
[#1068](https://github.com/haskell-servant/servant/pull/1068)
- *servant-docs* Fix markdown indentation
[#1043](https://github.com/haskell-servant/servant/pull/1043)
- *servant* Export `GetHeaders'`
[#1052](https://github.com/haskell-servant/servant/pull/1052)
- *servant* Add `Bitraversable` and other `Bi-` instances for `:<|>`
[#1032](https://github.com/haskell-servant/servant/pull/1032)
- *servant* Add `PutCreated` method type alias
[#1024](https://github.com/haskell-servant/servant/pull/1024)
- *servant-client-core* Add `aeson` and `Lift BaseUrl` instances
[#1037](https://github.com/haskell-servant/servant/pull/1037)
- *servant* Add `ToSourceIO (NonEmpty a)` instance
2018-11-09 13:55:40 +01:00
[#988](https://github.com/haskell-servant/servant/pull/988)
- Development process improvements
- Apply `stylish-haskell` to all modules
[#1001](https://github.com/haskell-servant/servant/pull/1001)
- Amend `CONTRIBUTING.md`
[#1036](https://github.com/haskell-servant/servant/pull/1036)
- `servant-docs` has golden tests for `ComprehensiveAPI`
[#1071](https://github.com/haskell-servant/servant/pull/1071)
- Other
[#1039](https://github.com/haskell-servant/servant/pull/1039)
[#1046](https://github.com/haskell-servant/servant/pull/1046)
[#1062](https://github.com/haskell-servant/servant/pull/1062)
[#1069](https://github.com/haskell-servant/servant/pull/1069)
[#985](https://github.com/haskell-servant/servant/pull/985)
- *Documentation* Tutorial and new recipes
- [Using free client](https://docs.servant.dev/en/latest/cookbook/using-free-client/UsingFreeClient.html)
2018-11-09 13:55:40 +01:00
[#1005](https://github.com/haskell-servant/servant/pull/1005)
- [Generating mock curl calls](https://docs.servant.dev/en/latest/cookbook/curl-mock/CurlMock.html)
2018-11-09 13:55:40 +01:00
[#1033](https://github.com/haskell-servant/servant/pull/1033)
- [Error logging with Sentry](https://docs.servant.dev/en/latest/cookbook/sentry/Sentry.html)
2018-11-09 13:55:40 +01:00
[#987](https://github.com/haskell-servant/servant/pull/987)
- [Hoist Server With Context for Custom Monads](https://docs.servant.dev/en/latest/cookbook/hoist-server-with-context/HoistServerWithContext.html)
2018-11-09 13:55:40 +01:00
[#1044](https://github.com/haskell-servant/servant/pull/1044)
- [How To Test Servant Applications](https://docs.servant.dev/en/latest/cookbook/testing/Testing.html)
2018-11-09 13:55:40 +01:00
[#1050](https://github.com/haskell-servant/servant/pull/1050)
- `genericServeT`: using custom monad with `Servant.API.Generic`
in [Using generics](https://docs.servant.dev/en/latest/cookbook/generic/Generic.html)
2018-11-09 13:55:40 +01:00
[#1058](https://github.com/haskell-servant/servant/pull/1058)
- Tutorial
[#974](https://github.com/haskell-servant/servant/pull/974)
[#1007](https://github.com/haskell-servant/servant/pull/1007)
- miscellanea: fixed typos etc.
[#1030](https://github.com/haskell-servant/servant/pull/1030)
[#1020](https://github.com/haskell-servant/servant/pull/1020)
[#1059](https://github.com/haskell-servant/servant/pull/1059)
- *Documentation* README
[#1010](https://github.com/haskell-servant/servant/pull/1010)
- *servant-client-ghcjs* updates. **note** package is not released on Hackage
[#938](https://github.com/haskell-servant/servant/pull/938)
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`.
2018-11-09 13:55:40 +01:00
[#998](https://github.com/haskell-servant/servant/pull/998)
2018-07-04 21:59:43 +02:00
- *servant-server* Deprecate `Servant.Utils.StaticUtils`, use `Servant.Server.StaticUtils`.
2018-06-12 17:05:32 +02:00
0.14
----
2019-02-18 22:32:10 +01:00
### Significant changes
2018-06-12 17:05:32 +02:00
- `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://docs.servant.dev/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))
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))
- Add [pagination cookbook recipe](https://docs.servant.dev/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))
- Add [`servant-flatten` "spice" to the structuring api recipe](https://docs.servant.dev/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
2019-02-18 22:32:10 +01:00
(VIM) Regular-expression to link PR numbers: `s/\v#(\d+)/[#\1](https:\/\/github.com\/haskell-servant\/servant\/pull\/\1)/`
2018-06-12 17:05:32 +02:00
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://docs.servant.dev/en/release-0.13/tutorial/ApiType.html#streamget-and-streampost)
- [Serving an API - streaming endpoints](http://docs.servant.dev/en/release-0.13/tutorial/Server.html#streaming-endpoints)
- [Querying an API - Querying Streaming APIs](http://docs.servant.dev/en/release-0.13/tutorial/Client.html#querying-streaming-apis)
2018-02-08 11:29:16 +01:00
- *servant* Add `Servant.API.Modifiers`
([#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)
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://docs.servant.dev/en/master/cookbook/index.html
2018-02-08 11:29:16 +01:00
([#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))
0.12
2017-06-02 17:18:42 +02: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))
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
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
for Servant type-level DSL.
### 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))
- 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
### 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))
### 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
* 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.
0.9
---
2016-09-07 17:31:54 +02:00
* 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`
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.
* 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
---
2016-01-18 22:34:56 +01:00
* Add `WithNamedConfig` combinator.
* Add `HttpVersion`, `IsSecure`, `RemoteHost` and `Vault` combinators
* 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.
* 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.
* Add `BasicAuth` combinator to support Basic authentication
* Add generalized authentication support
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
---
* `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