From 21bac090100e8ae4f64904dec269b5df4b868604 Mon Sep 17 00:00:00 2001 From: Oleg Grenrus Date: Mon, 18 Jun 2018 15:42:16 +0300 Subject: [PATCH 1/3] Regenerate .travis.yml --- .travis.yml | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index dbb97122..0a4460ac 100644 --- a/.travis.yml +++ b/.travis.yml @@ -65,7 +65,8 @@ install: - BENCH=${BENCH---enable-benchmarks} - TEST=${TEST---enable-tests} - HADDOCK=${HADDOCK-true} - - INSTALLED=${INSTALLED-true} + - UNCONSTRAINED=${UNCONSTRAINED-true} + - NOINSTALLEDCONSTRAINTS=${NOINSTALLEDCONSTRAINTS-false} - GHCHEAD=${GHCHEAD-false} - travis_retry cabal update -v - "sed -i.bak 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config" @@ -75,7 +76,10 @@ install: - "printf 'packages: \"servant\" \"servant-client\" \"servant-client-core\" \"servant-docs\" \"servant-foreign\" \"servant-server\" \"doc/tutorial\" \"doc/cookbook/basic-auth\" \"doc/cookbook/db-postgres-pool\" \"doc/cookbook/db-sqlite-simple\" \"doc/cookbook/https\" \"doc/cookbook/pagination\" \"doc/cookbook/structuring-apis\" \"doc/cookbook/using-custom-monad\"\\n' > cabal.project" - "echo 'constraints: foundation >=0.0.14,memory <0.14.12 || >0.14.12' >> cabal.project" - "echo 'allow-newer: servant-auth-server:http-types,servant-auth-server:servant-server, http-media:base, servant-js:servant,servant-pagination:servant,servant-pagination:servant-server' >> cabal.project" - - cat cabal.project + - touch cabal.project.local + - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi" + - cat cabal.project || true + - cat cabal.project.local || true - if [ -f "servant/configure.ac" ]; then (cd "servant" && autoreconf -i); fi @@ -149,10 +153,12 @@ script: - "printf 'packages: servant-*/*.cabal servant-client-*/*.cabal servant-client-core-*/*.cabal servant-docs-*/*.cabal servant-foreign-*/*.cabal servant-server-*/*.cabal tutorial-*/*.cabal cookbook-basic-auth-*/*.cabal cookbook-db-postgres-pool-*/*.cabal cookbook-db-sqlite-simple-*/*.cabal cookbook-https-*/*.cabal cookbook-pagination-*/*.cabal cookbook-structuring-apis-*/*.cabal cookbook-using-custom-monad-*/*.cabal\\n' > cabal.project" - "echo 'constraints: foundation >=0.0.14,memory <0.14.12 || >0.14.12' >> cabal.project" - "echo 'allow-newer: servant-auth-server:http-types,servant-auth-server:servant-server, http-media:base, servant-js:servant,servant-pagination:servant,servant-pagination:servant-server' >> cabal.project" - - cat cabal.project + - touch cabal.project.local + - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi" + - cat cabal.project || true + - cat cabal.project.local || true - echo -en 'travis_fold:end:unpack\\r' - - echo Building with tests and benchmarks... && echo -en 'travis_fold:start:build-everything\\r' # build & run tests, build benchmarks - cabal new-build -w ${HC} ${TEST} ${BENCH} all @@ -165,5 +171,10 @@ script: - if $HADDOCK; then cabal new-haddock -w ${HC} ${TEST} ${BENCH} all; else echo "Skipping haddock generation";fi - echo -en 'travis_fold:end:haddock\\r' + - echo Building without installed constraints for packages in global-db... && echo -en 'travis_fold:start:build-installed\\r' + # Build without installed constraints for packages in global-db + - if $UNCONSTRAINED; then rm -f cabal.project.local; echo cabal new-build -w ${HC} --disable-tests --disable-benchmarks all; else echo "Not building without installed constraints"; fi + + - echo -en 'travis_fold:end:build-installed\\r' # REGENDATA ["--config=cabal.make-travis-yml","--output=.travis.yml","cabal.project"] # EOF From daa5d4a891c210f0d214e6014884402991752942 Mon Sep 17 00:00:00 2001 From: Oleg Grenrus Date: Mon, 18 Jun 2018 16:28:51 +0300 Subject: [PATCH 2/3] Bump some lower bounds Also drop unused dependencies --- servant-client-core/servant-client-core.cabal | 25 +++++---- servant-client/servant-client.cabal | 35 +++++------- servant-server/servant-server.cabal | 54 ++++++++----------- servant/servant.cabal | 37 +++++++------ stack.yaml | 15 +----- 5 files changed, 68 insertions(+), 98 deletions(-) diff --git a/servant-client-core/servant-client-core.cabal b/servant-client-core/servant-client-core.cabal index 73459a32..8affb117 100644 --- a/servant-client-core/servant-client-core.cabal +++ b/servant-client-core/servant-client-core.cabal @@ -51,12 +51,11 @@ library base >= 4.7 && < 4.12 , bytestring >= 0.10.4.0 && < 0.11 , containers >= 0.5.5.1 && < 0.6 - , mtl >= 2.1 && < 2.3 , text >= 1.2.3.0 && < 1.3 if !impl(ghc >= 8.0) build-depends: - semigroups >=0.18.3 && <0.19 + semigroups >=0.18.4 && <0.19 -- Servant dependencies build-depends: @@ -65,16 +64,16 @@ library -- Other dependencies: Lower bound around what is in the latest Stackage LTS. -- Here can be exceptions if we really need features from the newer versions. build-depends: - base-compat >= 0.9.3 && < 0.11 + base-compat >= 0.10.1 && < 0.11 , base64-bytestring >= 1.0.0.1 && < 1.1 - , exceptions >= 0.8.3 && < 0.11 - , free >= 5.0.1 && < 5.1 - , generics-sop >= 0.3.1.0 && < 0.4 - , http-api-data >= 0.3.7.1 && < 0.4 - , http-media >= 0.7.1.1 && < 0.8 - , http-types >= 0.12 && < 0.13 + , exceptions >= 0.10.0 && < 0.11 + , free >= 5.0.2 && < 5.1 + , generics-sop >= 0.3.2.0 && < 0.4 + , http-api-data >= 0.3.8.1 && < 0.4 + , http-media >= 0.7.1.2 && < 0.8 + , http-types >= 0.12.1 && < 0.13 , network-uri >= 2.6.1.0 && < 2.7 - , safe >= 0.3.15 && < 0.4 + , safe >= 0.3.17 && < 0.4 hs-source-dirs: src default-language: Haskell2010 @@ -99,8 +98,8 @@ test-suite spec -- Additonal dependencies build-depends: deepseq >= 1.3.0.2 && <1.5 - , hspec >= 2.4.4 && <2.6 - , QuickCheck >= 2.10.1 && < 2.12 + , hspec >= 2.4.1 && <2.6 + , QuickCheck >= 2.11.3 && < 2.12 build-tool-depends: - hspec-discover:hspec-discover >= 2.4.4 && <2.6 + hspec-discover:hspec-discover >= 2.5.1 && <2.6 diff --git a/servant-client/servant-client.cabal b/servant-client/servant-client.cabal index 2130d224..4b660387 100644 --- a/servant-client/servant-client.cabal +++ b/servant-client/servant-client.cabal @@ -51,7 +51,7 @@ library , transformers >= 0.3.0.0 && < 0.6 if !impl(ghc >= 8.0) - build-depends: semigroups >=0.18.3 && <0.19 + build-depends: semigroups >=0.18.4 && <0.19 -- Servant dependencies build-depends: @@ -60,19 +60,16 @@ library -- Other dependencies: Lower bound around what is in the latest Stackage LTS. -- Here can be exceptions if we really need features from the newer versions. build-depends: - aeson >= 1.2.3.0 && < 1.5 - , base-compat >= 0.9.3 && < 0.11 - , attoparsec >= 0.13.2.0 && < 0.14 - , http-client >= 0.5.7.1 && < 0.6 - , http-client-tls >= 0.3.5.1 && < 0.4 - , http-media >= 0.7.1.1 && < 0.8 - , http-types >= 0.12 && < 0.13 - , exceptions >= 0.8.3 && < 0.11 - , monad-control >= 1.0.0.4 && < 1.1 - , semigroupoids >= 5.2.1 && < 5.3 - , stm >= 2.4.4.1 && < 2.5 - , transformers-base >= 0.4.4 && < 0.5 - , transformers-compat >= 0.5.1 && < 0.7 + base-compat >= 0.10.1 && < 0.11 + , http-client >= 0.5.12 && < 0.6 + , http-media >= 0.7.1.2 && < 0.8 + , http-types >= 0.12.1 && < 0.13 + , exceptions >= 0.10.0 && < 0.11 + , monad-control >= 1.0.2.3 && < 1.1 + , semigroupoids >= 5.2.2 && < 5.3 + , stm >= 2.4.5.0 && < 2.5 + , transformers-base >= 0.4.5.2 && < 0.5 + , transformers-compat >= 0.6.2 && < 0.7 hs-source-dirs: src default-language: Haskell2010 @@ -97,10 +94,8 @@ test-suite spec , aeson , base-compat , bytestring - , containers , http-api-data , http-client - , http-media , http-types , mtl , servant-client @@ -117,18 +112,16 @@ test-suite spec -- Additonal dependencies build-depends: - deepseq >= 1.3.0.2 && < 1.5 - , generics-sop >= 0.3.1.0 && < 0.4 - , hspec >= 2.4.4 && < 2.6 + generics-sop >= 0.3.2.0 && < 0.4 + , hspec >= 2.5.1 && < 2.6 , HUnit >= 1.6 && < 1.7 - , random-bytestring >= 0.1 && < 0.2 , network >= 2.6.3.2 && < 2.8 , QuickCheck >= 2.10.1 && < 2.12 , servant == 0.14.* , servant-server == 0.14.* build-tool-depends: - hspec-discover:hspec-discover >= 2.4.4 && < 2.6 + hspec-discover:hspec-discover >= 2.5.1 && < 2.6 test-suite readme type: exitcode-stdio-1.0 diff --git a/servant-server/servant-server.cabal b/servant-server/servant-server.cabal index 23dca1de..5d2e6590 100644 --- a/servant-server/servant-server.cabal +++ b/servant-server/servant-server.cabal @@ -40,7 +40,7 @@ custom-setup setup-depends: base >= 4 && <5, Cabal, - cabal-doctest >= 1.0.1 && <1.1 + cabal-doctest >= 1.0.6 && <1.1 library exposed-modules: @@ -71,7 +71,7 @@ library if !impl(ghc >= 8.0) build-depends: - semigroups >= 0.18.3 && < 0.19 + semigroups >= 0.18.4 && < 0.19 -- Servant dependencies build-depends: @@ -80,28 +80,22 @@ library -- Other dependencies: Lower bound around what is in the latest Stackage LTS. -- Here can be exceptions if we really need features from the newer versions. build-depends: - aeson >= 1.2.3.0 && < 1.5 - , base-compat >= 0.9.3 && < 0.11 - , attoparsec >= 0.13.2.0 && < 0.14 + base-compat >= 0.10.1 && < 0.11 , base64-bytestring >= 1.0.0.1 && < 1.1 - , exceptions >= 0.8.3 && < 0.11 - , http-api-data >= 0.3.7.1 && < 0.4 - , http-media >= 0.7.1.1 && < 0.8 - , http-types >= 0.12 && < 0.13 + , exceptions >= 0.10.0 && < 0.11 + , http-api-data >= 0.3.8.1 && < 0.4 + , http-media >= 0.7.1.2 && < 0.8 + , http-types >= 0.12.1 && < 0.13 , network-uri >= 2.6.1.0 && < 2.7 - , monad-control >= 1.0.0.4 && < 1.1 - , network >= 2.6.3.2 && < 2.8 - , safe >= 0.3.15 && < 0.4 - , split >= 0.2.3.2 && < 0.3 + , monad-control >= 1.0.2.3 && < 1.1 + , network >= 2.6.3.5 && < 2.8 , string-conversions >= 0.4.0.1 && < 0.5 - , system-filepath >= 0.4 && < 0.5 - , resourcet >= 1.1.9 && < 1.3 + , resourcet >= 1.1.11 && < 1.3 , tagged >= 0.8.5 && < 0.9 , transformers-base >= 0.4.4 && < 0.5 - , transformers-compat >= 0.5.1 && < 0.7 + , transformers-compat >= 0.6.2 && < 0.7 , wai >= 3.2.1.1 && < 3.3 , wai-app-static >= 3.1.6.1 && < 3.2 - , warp >= 3.2.13 && < 3.3 , word8 >= 0.1.3 && < 0.2 hs-source-dirs: src @@ -120,11 +114,13 @@ executable greet base , servant , servant-server - , aeson - , warp , wai , text + build-depends: + aeson >= 1.3.1.1 && < 1.5 + , warp >= 3.2.13 && < 3.3 + test-suite spec type: exitcode-stdio-1.0 ghc-options: -Wall @@ -148,13 +144,10 @@ test-suite spec build-depends: base , base-compat - , aeson , base64-bytestring , bytestring - , exceptions , http-types , mtl - , network , resourcet , safe , servant @@ -164,27 +157,26 @@ test-suite spec , transformers , transformers-compat , wai - , warp -- Additonal dependencies build-depends: - directory >= 1.2.1.0 && < 1.4 - , hspec >= 2.4.4 && < 2.6 - , hspec-wai >= 0.9 && < 0.10 + aeson >= 1.3.1.1 && < 1.5 + , directory >= 1.2.1.0 && < 1.4 + , hspec >= 2.5.1 && < 2.6 + , hspec-wai >= 0.9.0 && < 0.10 + , QuickCheck >= 2.11.3 && < 2.12 , should-not-typecheck >= 2.1.0 && < 2.2 - , parsec >= 3.1.11 && < 3.2 - , QuickCheck >= 2.10.1 && < 2.12 + , temporary >= 1.3 && < 1.4 , wai-extra >= 3.0.21.0 && < 3.1 - , temporary >= 1.2.0.3 && < 1.4 build-tool-depends: - hspec-discover:hspec-discover >=2.4.4 && <2.6 + hspec-discover:hspec-discover >= 2.5.1 && <2.6 test-suite doctests build-depends: base , servant-server - , doctest >= 0.13.0 && <0.16 + , doctest >= 0.15.0 && <0.16 type: exitcode-stdio-1.0 main-is: test/doctests.hs buildable: True diff --git a/servant/servant.cabal b/servant/servant.cabal index 139872f1..6cf94bdb 100644 --- a/servant/servant.cabal +++ b/servant/servant.cabal @@ -34,7 +34,7 @@ custom-setup setup-depends: base >= 4 && <5, Cabal, - cabal-doctest >= 1.0.2 && <1.1 + cabal-doctest >= 1.0.6 && <1.1 library exposed-modules: @@ -77,25 +77,25 @@ library if !impl(ghc >= 8.0) build-depends: - semigroups >= 0.18.3 && < 0.19 + semigroups >= 0.18.4 && < 0.19 -- Other dependencies: Lower bound around what is in the latest Stackage LTS. -- Here can be exceptions if we really need features from the newer versions. build-depends: - base-compat >= 0.9.3 && < 0.11 - , aeson >= 1.2.3.0 && < 1.5 - , attoparsec >= 0.13.2.0 && < 0.14 + base-compat >= 0.10.1 && < 0.11 + , aeson >= 1.3.1.1 && < 1.5 + , attoparsec >= 0.13.2.2 && < 0.14 , case-insensitive >= 1.2.0.10 && < 1.3 - , http-api-data >= 0.3.7.1 && < 0.4 - , http-media >= 0.7.1.1 && < 0.8 - , http-types >= 0.12 && < 0.13 + , http-api-data >= 0.3.8.1 && < 0.4 + , http-media >= 0.7.1.2 && < 0.8 + , http-types >= 0.12.1 && < 0.13 , natural-transformation >= 0.4 && < 0.5 - , mmorph >= 1.1.0 && < 1.2 + , mmorph >= 1.1.2 && < 1.2 , tagged >= 0.8.5 && < 0.9 - , singleton-bool >= 0.1.2.0 && < 0.2 + , singleton-bool >= 0.1.4 && < 0.2 , string-conversions >= 0.4.0.1 && < 0.5 , network-uri >= 2.6.1.0 && < 2.7 - , vault >= 0.3.0.7 && < 0.4 + , vault >= 0.3.1.1 && < 0.4 hs-source-dirs: src default-language: Haskell2010 @@ -141,7 +141,6 @@ test-suite spec base , base-compat , aeson - , attoparsec , bytestring , servant , string-conversions @@ -153,23 +152,23 @@ test-suite spec -- Additonal dependencies build-depends: - aeson-compat >= 0.3.3 && < 0.4 - , hspec >= 2.4.4 && < 2.6 - , QuickCheck >= 2.10.1 && < 2.12 - , quickcheck-instances >= 0.3.16 && < 0.4 + aeson-compat >= 0.3.7.1 && < 0.4 + , hspec >= 2.5.1 && < 2.6 + , QuickCheck >= 2.11.3 && < 2.12 + , quickcheck-instances >= 0.3.18 && < 0.4 build-tool-depends: - hspec-discover:hspec-discover >= 2.4.4 && < 2.6 + hspec-discover:hspec-discover >= 2.5.1 && < 2.6 test-suite doctests build-depends: base , servant - , doctest >= 0.13.0 && <0.16 + , doctest >= 0.15.0 && <0.16 -- We test Links failure with doctest, so we need extra dependencies build-depends: - hspec >= 2.4.4 && < 2.6 + hspec >= 2.5.1 && < 2.6 type: exitcode-stdio-1.0 main-is: test/doctests.hs diff --git a/stack.yaml b/stack.yaml index f3f41102..e0290726 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,5 +1,5 @@ # Let's try to keep resolver at the first day of the month -resolver: nightly-2018-03-01 +resolver: nightly-2018-06-01 packages: - servant-client/ - servant-client-core/ @@ -8,18 +8,5 @@ packages: - servant-server/ - servant/ -extra-deps: -- cabal-doctest-1.0.6 -- http-api-data-0.3.7.2 -- http-types-0.12 -- text-1.2.3.0 -- aeson-1.3.0.0 -- exceptions-0.10.0 -- aeson-compat-0.3.7.1 -- free-5.0.1 -- lens-4.16 -- random-bytestring-0.1.3 -- pcg-random-0.1.3.5 - # allow-newer: true # ignores all bounds, that's a sledgehammer # - doc/tutorial/ From ca2573bf6a6c0ffc49cfcf59f6103f685130204d Mon Sep 17 00:00:00 2001 From: Oleg Grenrus Date: Mon, 18 Jun 2018 17:12:35 +0300 Subject: [PATCH 3/3] Add changelogs to other packages --- servant-client-core/CHANGELOG.md | 44 +++++++++++++++++++++++-- servant-client/CHANGELOG.md | 39 +++++++++++++++++++++-- servant-foreign/servant-foreign.cabal | 1 + servant-server/CHANGELOG.md | 46 +++++++++++++++++++++++++++ servant/CHANGELOG.md | 4 +-- 5 files changed, 128 insertions(+), 6 deletions(-) diff --git a/servant-client-core/CHANGELOG.md b/servant-client-core/CHANGELOG.md index a52288a6..aa2c454a 100644 --- a/servant-client-core/CHANGELOG.md +++ b/servant-client-core/CHANGELOG.md @@ -4,10 +4,50 @@ 0.14 ---- -- Add a `hoistClientMonad` method to the `HasClient` typeclass, for - changing the monad in which client functions run. +- `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)) + +- *servant-client-core* Free `Client` implementation. + Useful for testing `HasClient` instances. + ([#920](https://github.com/haskell-servant/servant/pull/920)) + +- *servant-client-core* Add `hoistClient` to `HasClient`. + 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 + 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). ([#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 + ``` + 0.13.0.1 -------- diff --git a/servant-client/CHANGELOG.md b/servant-client/CHANGELOG.md index 7a0875ae..3b40adcf 100644 --- a/servant-client/CHANGELOG.md +++ b/servant-client/CHANGELOG.md @@ -4,10 +4,45 @@ 0.14 ---- -- Add `hoistClient` for changing the monad in which - client functions run. +- `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)) + +- *servant-client-core* Add `hoistClient` to `HasClient`. + 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 + 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). ([#936](https://github.com/haskell-servant/servant/pull/936)) +- *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)) + 0.13.0.1 -------- diff --git a/servant-foreign/servant-foreign.cabal b/servant-foreign/servant-foreign.cabal index 5368d7fc..dbcc2449 100644 --- a/servant-foreign/servant-foreign.cabal +++ b/servant-foreign/servant-foreign.cabal @@ -1,5 +1,6 @@ name: servant-foreign version: 0.11.1 +x-revision: 1 synopsis: Helpers for generating clients for servant APIs in any programming language description: Helper types and functions for generating client functions for servant APIs in any programming language diff --git a/servant-server/CHANGELOG.md b/servant-server/CHANGELOG.md index 5fb66818..9d3408df 100644 --- a/servant-server/CHANGELOG.md +++ b/servant-server/CHANGELOG.md @@ -1,6 +1,52 @@ [The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant-server/CHANGELOG.md) [Changelog for `servant` package contains significant entries for all core packages.](https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md) +0.14 +---- + +- `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)) + +- *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)) + + 0.13.0.1 -------- diff --git a/servant/CHANGELOG.md b/servant/CHANGELOG.md index e5b58345..79ceeb97 100644 --- a/servant/CHANGELOG.md +++ b/servant/CHANGELOG.md @@ -30,11 +30,11 @@ - Added `NoFraming` streaming strategy ([#959](https://github.com/haskell-servant/servant/pull/959)) -- *servant-client* Free `Client` implementation. +- *servant-client-core* Free `Client` implementation. Useful for testing `HasClient` instances. ([#920](https://github.com/haskell-servant/servant/pull/920)) -- *servant-client* Add `hoistClient` to `HasClient`. +- *servant-client-core* Add `hoistClient` to `HasClient`. 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 in which *client functions* live.