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 )
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`
2019-02-21 09:59:45 +01:00
[#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.
2019-02-21 09:59:45 +01:00
[#1130 ](https://github.com/haskell-servant/servant/pull/1130 )
2019-02-18 22:32:10 +01:00
- *servant-http-streams* New package
2019-02-21 09:59:45 +01:00
[#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.
2019-02-21 09:59:45 +01:00
[#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`
2019-02-21 09:59:45 +01:00
[#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`
2019-02-21 09:59:45 +01:00
[#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
```
2019-02-21 09:59:45 +01:00
- *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-18 22:32:10 +01:00
- Allow `network-3.0`
2019-02-21 09:59:45 +01:00
[#1107 ](https://github.com/haskell-servant/servant/pull/1107 )
2019-02-18 22:32:10 +01:00
- Add `NFData NoContent` instance
2019-02-21 09:59:45 +01:00
[#1090 ](https://github.com/haskell-servant/servant/pull/1090 )
2019-02-18 22:32:10 +01:00
- Documentation updates
2019-02-21 09:59:45 +01:00
[#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
2019-02-21 09:59:45 +01:00
[#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
2018-11-12 21:04:29 +01:00
`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.
2018-11-12 21:04:29 +01:00
- *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 )
2018-11-12 21:04:29 +01:00
- *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 )
2018-11-12 21:04:29 +01:00
- *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 )
2018-11-12 21:04:29 +01:00
- *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 )
2018-11-12 21:04:29 +01:00
- *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 )
2018-11-12 21:04:29 +01:00
- *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://haskell-servant.readthedocs.io/en/latest/cookbook/using-free-client/UsingFreeClient.html )
[#1005 ](https://github.com/haskell-servant/servant/pull/1005 )
- [Generating mock curl calls ](https://haskell-servant.readthedocs.io/en/latest/cookbook/curl-mock/CurlMock.html )
[#1033 ](https://github.com/haskell-servant/servant/pull/1033 )
- [Error logging with Sentry ](https://haskell-servant.readthedocs.io/en/latest/cookbook/sentry/Sentry.html )
[#987 ](https://github.com/haskell-servant/servant/pull/987 )
- [Hoist Server With Context for Custom Monads ](https://haskell-servant.readthedocs.io/en/latest/cookbook/hoist-server-with-context/HoistServerWithContext.html )
[#1044 ](https://github.com/haskell-servant/servant/pull/1044 )
- [How To Test Servant Applications ](https://haskell-servant.readthedocs.io/en/latest/cookbook/testing/Testing.html )
[#1050 ](https://github.com/haskell-servant/servant/pull/1050 )
- `genericServeT` : using custom monad with `Servant.API.Generic`
in [Using generics ](https://haskell-servant.readthedocs.io/en/latest/cookbook/generic/Generic.html )
[#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://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
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://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