diff --git a/.hlint.yaml b/.hlint.yaml new file mode 100644 index 00000000..7df8e101 --- /dev/null +++ b/.hlint.yaml @@ -0,0 +1,51 @@ +# Control which extensions/flags/modules/functions can be used +# +- extensions: + - default: false # all extension are banned by default + - name: + - CPP + - DataKinds + - DeriveDataTypeable + - DeriveFoldable + - DeriveFunctor + - DeriveGeneric + - DeriveTraversable + - FlexibleContexts + - FlexibleInstances + - FunctionalDependencies + - GADTs + - KindSignatures + - MultiParamTypeClasses + - OverloadedStrings + - PolyKinds + - RankNTypes + - ScopedTypeVariables + - TypeFamilies + - TypeOperators + - UndecidableInstances + +- modules: + - {name: [Data.Set], as: Set} + - {name: Control.Arrow, within: []} # Certain modules are banned entirely + +- functions: + - {name: unsafePerformIO, within: []} # unsafePerformIO can only appear in no modules + +# Turn on hints that are off by default +# +# Ban "module X(module X) where", to require a real export list +- warn: {name: Use explicit module export list} + +# Ignore some builtin hints +- ignore: {name: Redundant do} +- ignore: {name: Parse error} +- ignore: {name: Use fmap} +- ignore: {name: "Use <$>"} +- ignore: {name: Use list comprehension} +- ignore: {name: Use lambda-case} +- ignore: {name: Eta reduce} + +# Add custom hints for this project +# +# Will suggest replacing "wibbleMany [myvar]" with "wibbleOne myvar" +# - error: {lhs: "wibbleMany [x]", rhs: wibbleOne x} diff --git a/.travis.yml b/.travis.yml index b6926f8a..0face399 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,8 +40,6 @@ matrix: addons: {"apt":{"sources":["hvr-ghc"],"packages":["ghc-8.2.2","cabal-install-3.0"]}} - compiler: ghc-8.0.2 addons: {"apt":{"sources":["hvr-ghc"],"packages":["ghc-8.0.2","cabal-install-3.0"]}} - allow_failures: - - compiler: ghc-8.8.1 before_install: - HC=$(echo "/opt/$CC/bin/ghc" | sed 's/-/\//') - WITHCOMPILER="-w $HC" @@ -80,7 +78,6 @@ install: - TEST=--enable-tests - BENCH=--enable-benchmarks - HEADHACKAGE=false - - if [ $HCNUMVER -ge 80800 ] ; then HEADHACKAGE=true ; fi - rm -f $CABALHOME/config - | echo "verbose: normal +nowrap +markoutput" >> $CABALHOME/config @@ -98,17 +95,6 @@ install: echo " prefix: $CABALHOME" >> $CABALHOME/config echo "repository hackage.haskell.org" >> $CABALHOME/config echo " url: http://hackage.haskell.org/" >> $CABALHOME/config - - | - if $HEADHACKAGE; then - echo "allow-newer: $($HCPKG list --simple-output | sed -E 's/([a-zA-Z-]+)-[0-9.]+/*:\1/g')" >> $CABALHOME/config - echo "repository head.hackage.ghc.haskell.org" >> $CABALHOME/config - echo " url: https://ghc.gitlab.haskell.org/head.hackage/" >> $CABALHOME/config - echo " secure: True" >> $CABALHOME/config - echo " root-keys: 7541f32a4ccca4f97aea3b22f5e593ba2c0267546016b992dfadcd2fe944e55d" >> $CABALHOME/config - echo " 26021a13b401500c8eb2761ca95c61f2d625bfef951b939a8124ed12ecf07329" >> $CABALHOME/config - echo " f76d08be13e9a61a377a85e2fb63f4c5435d40f8feb3e12eb05905edb8cdea89" >> $CABALHOME/config - echo " key-threshold: 3" >> $CABALHOME/config - fi - GHCJOBS=-j2 - | echo "program-default-options" >> $CABALHOME/config @@ -142,36 +128,34 @@ install: if [ $HCNUMVER -ge 80400 ] ; then echo "packages: doc/cookbook/using-custom-monad" >> cabal.project ; fi if [ $HCNUMVER -ge 80400 ] ; then echo "packages: doc/cookbook/using-free-client" >> cabal.project ; fi - | - echo "constraints: foundation >=0.0.14" >> cabal.project - echo "constraints: memory <0.14.12 || >0.14.12" >> cabal.project - echo "constraints: sqlite-simple < 0" >> cabal.project - echo "allow-newer: servant-multipart:http-media" >> cabal.project - echo "allow-newer: servant-multipart:lens" >> cabal.project - echo "allow-newer: servant-js:base" >> cabal.project - echo "allow-newer: servant-js:lens" >> cabal.project - echo "allow-newer: servant-quickcheck:base" >> cabal.project - echo "allow-newer: servant-quickcheck:hspec" >> cabal.project - echo "allow-newer: servant-quickcheck:http-client" >> cabal.project - echo "allow-newer: servant-quickcheck:http-media" >> cabal.project - echo "allow-newer: servant-quickcheck:QuickCheck" >> cabal.project - echo "allow-newer: servant-quickcheck:servant" >> cabal.project - echo "allow-newer: servant-quickcheck:servant-client" >> cabal.project - echo "allow-newer: servant-quickcheck:servant-server" >> cabal.project - echo "allow-newer: servant-quickcheck:time" >> cabal.project - echo "allow-newer: servant-quickcheck:warp" >> cabal.project - echo "allow-newer: vault-0.3.1.2:hashable" >> cabal.project - echo "allow-newer: psqueues-0.2.7.1:hashable" >> cabal.project - echo "allow-newer: sqlite-simple-0.4.16.0:semigroups" >> cabal.project - echo "allow-newer: direct-sqlite-2.3.24:semigroups" >> cabal.project - echo "allow-newer: io-streams-1.5.1.0:network" >> cabal.project - echo "allow-newer: io-streams:primitive" >> cabal.project - echo "allow-newer: openssl-streams-1.2.2.0:network" >> cabal.project - echo "optimization: False" >> cabal.project - echo "" >> cabal.project - echo "source-repository-package" >> cabal.project - echo " type: git" >> cabal.project - echo " location: https://github.com/luqui/control-monad-omega.git" >> cabal.project - echo " tag: 76c71e8917eec275ba423959f00a34583b5c7215" >> cabal.project + echo "constraints: foundation >=0.0.14" >> cabal.project + echo "constraints: memory <0.14.12 || >0.14.12" >> cabal.project + echo "constraints: sqlite-simple < 0" >> cabal.project + echo "allow-newer: servant-multipart-0.11.4:http-media" >> cabal.project + echo "allow-newer: servant-multipart-0.11.4:lens" >> cabal.project + echo "allow-newer: servant-js-0.9.4:base" >> cabal.project + echo "allow-newer: servant-js-0.9.4:base-compat" >> cabal.project + echo "allow-newer: servant-js-0.9.4:lens" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:base" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:base-compat-batteries" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:hspec" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:http-client" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:http-media" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:QuickCheck" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:servant" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:servant-client" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:servant-server" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:time" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:warp" >> cabal.project + echo "allow-newer: aeson-pretty-0.8.7:base-compat" >> cabal.project + echo "allow-newer: vault-0.3.1.2:hashable" >> cabal.project + echo "allow-newer: psqueues-0.2.7.1:hashable" >> cabal.project + echo "allow-newer: sqlite-simple-0.4.16.0:semigroups" >> cabal.project + echo "allow-newer: direct-sqlite-2.3.24:semigroups" >> cabal.project + echo "allow-newer: io-streams-1.5.1.0:network" >> cabal.project + echo "allow-newer: io-streams-1.5.1.0:primitive" >> cabal.project + echo "allow-newer: openssl-streams-1.2.2.0:network" >> cabal.project + echo "optimization: False" >> cabal.project - "for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/-[^-]*$//' | (grep -vE -- '^(cookbook-basic-auth|cookbook-basic-streaming|cookbook-curl-mock|cookbook-db-postgres-pool|cookbook-file-upload|cookbook-generic|cookbook-structuring-apis|cookbook-testing|cookbook-using-custom-monad|cookbook-using-free-client|servant|servant-client|servant-client-core|servant-conduit|servant-docs|servant-foreign|servant-http-streams|servant-machines|servant-pipes|servant-server|tutorial)$' || true) | sed 's/^/constraints: /' | sed 's/$/ installed/' >> cabal.project.local; done" - cat cabal.project || true - cat cabal.project.local || true @@ -202,11 +186,8 @@ install: script: - DISTDIR=$(mktemp -d /tmp/dist-test.XXXX) # Packaging... - - echo 'Packaging...' && echo -en 'travis_fold:start:sdist\\r' - ${CABAL} v2-sdist all | color_cabal_output - - echo -en 'travis_fold:end:sdist\\r' # Unpacking... - - echo 'Unpacking...' && echo -en 'travis_fold:start:unpack\\r' - mv dist-newstyle/sdist/*.tar.gz ${DISTDIR}/ - cd ${DISTDIR} || false - find . -maxdepth 1 -type f -name '*.tar.gz' -exec tar -xvf '{}' \; @@ -258,61 +239,54 @@ script: if [ $HCNUMVER -ge 80400 ] ; then echo "packages: ${PKGDIR_cookbook_using_custom_monad}" >> cabal.project ; fi if [ $HCNUMVER -ge 80400 ] ; then echo "packages: ${PKGDIR_cookbook_using_free_client}" >> cabal.project ; fi - | - echo "constraints: foundation >=0.0.14" >> cabal.project - echo "constraints: memory <0.14.12 || >0.14.12" >> cabal.project - echo "constraints: sqlite-simple < 0" >> cabal.project - echo "allow-newer: servant-multipart:http-media" >> cabal.project - echo "allow-newer: servant-multipart:lens" >> cabal.project - echo "allow-newer: servant-js:base" >> cabal.project - echo "allow-newer: servant-js:lens" >> cabal.project - echo "allow-newer: servant-quickcheck:base" >> cabal.project - echo "allow-newer: servant-quickcheck:hspec" >> cabal.project - echo "allow-newer: servant-quickcheck:http-client" >> cabal.project - echo "allow-newer: servant-quickcheck:http-media" >> cabal.project - echo "allow-newer: servant-quickcheck:QuickCheck" >> cabal.project - echo "allow-newer: servant-quickcheck:servant" >> cabal.project - echo "allow-newer: servant-quickcheck:servant-client" >> cabal.project - echo "allow-newer: servant-quickcheck:servant-server" >> cabal.project - echo "allow-newer: servant-quickcheck:time" >> cabal.project - echo "allow-newer: servant-quickcheck:warp" >> cabal.project - echo "allow-newer: vault-0.3.1.2:hashable" >> cabal.project - echo "allow-newer: psqueues-0.2.7.1:hashable" >> cabal.project - echo "allow-newer: sqlite-simple-0.4.16.0:semigroups" >> cabal.project - echo "allow-newer: direct-sqlite-2.3.24:semigroups" >> cabal.project - echo "allow-newer: io-streams-1.5.1.0:network" >> cabal.project - echo "allow-newer: io-streams:primitive" >> cabal.project - echo "allow-newer: openssl-streams-1.2.2.0:network" >> cabal.project - echo "optimization: False" >> cabal.project - echo "" >> cabal.project - echo "source-repository-package" >> cabal.project - echo " type: git" >> cabal.project - echo " location: https://github.com/luqui/control-monad-omega.git" >> cabal.project - echo " tag: 76c71e8917eec275ba423959f00a34583b5c7215" >> cabal.project + echo "constraints: foundation >=0.0.14" >> cabal.project + echo "constraints: memory <0.14.12 || >0.14.12" >> cabal.project + echo "constraints: sqlite-simple < 0" >> cabal.project + echo "allow-newer: servant-multipart-0.11.4:http-media" >> cabal.project + echo "allow-newer: servant-multipart-0.11.4:lens" >> cabal.project + echo "allow-newer: servant-js-0.9.4:base" >> cabal.project + echo "allow-newer: servant-js-0.9.4:base-compat" >> cabal.project + echo "allow-newer: servant-js-0.9.4:lens" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:base" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:base-compat-batteries" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:hspec" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:http-client" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:http-media" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:QuickCheck" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:servant" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:servant-client" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:servant-server" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:time" >> cabal.project + echo "allow-newer: servant-quickcheck-0.0.7.4:warp" >> cabal.project + echo "allow-newer: aeson-pretty-0.8.7:base-compat" >> cabal.project + echo "allow-newer: vault-0.3.1.2:hashable" >> cabal.project + echo "allow-newer: psqueues-0.2.7.1:hashable" >> cabal.project + echo "allow-newer: sqlite-simple-0.4.16.0:semigroups" >> cabal.project + echo "allow-newer: direct-sqlite-2.3.24:semigroups" >> cabal.project + echo "allow-newer: io-streams-1.5.1.0:network" >> cabal.project + echo "allow-newer: io-streams-1.5.1.0:primitive" >> cabal.project + echo "allow-newer: openssl-streams-1.2.2.0:network" >> cabal.project + echo "optimization: False" >> cabal.project - "for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/-[^-]*$//' | (grep -vE -- '^(cookbook-basic-auth|cookbook-basic-streaming|cookbook-curl-mock|cookbook-db-postgres-pool|cookbook-file-upload|cookbook-generic|cookbook-structuring-apis|cookbook-testing|cookbook-using-custom-monad|cookbook-using-free-client|servant|servant-client|servant-client-core|servant-conduit|servant-docs|servant-foreign|servant-http-streams|servant-machines|servant-pipes|servant-server|tutorial)$' || true) | sed 's/^/constraints: /' | sed 's/$/ installed/' >> cabal.project.local; done" - cat cabal.project || true - cat cabal.project.local || true - - echo -en 'travis_fold:end:unpack\\r' # Building with tests and benchmarks... - - echo 'Building with tests and benchmarks...' && echo -en 'travis_fold:start:build-everything\\r' # build & run tests, build benchmarks - ${CABAL} v2-build $WITHCOMPILER ${TEST} ${BENCH} all | color_cabal_output - - echo -en 'travis_fold:end:build-everything\\r' # Testing... - ${CABAL} v2-test $WITHCOMPILER ${TEST} ${BENCH} all | color_cabal_output # haddock... - - echo 'haddock...' && echo -en 'travis_fold:start:haddock\\r' - ${CABAL} v2-haddock $WITHCOMPILER --with-haddock $HADDOCK ${TEST} ${BENCH} all | color_cabal_output - - echo -en 'travis_fold:end:haddock\\r' # Constraint sets - rm -rf cabal.project.local # Constraint set http-media-0.8 - - echo 'Constraint set http-media-0.8' && echo -en 'travis_fold:start:constraint-sets-http-media-0.8\\r' - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --constraint='http-media ==0.8.*' all | color_cabal_output - - echo -en 'travis_fold:end:constraint-sets-http-media-0.8\\r' # Constraint set http-media-0.7 - - echo 'Constraint set http-media-0.7' && echo -en 'travis_fold:start:constraint-sets-http-media-0.7\\r' - - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --constraint='http-media ==0.7.*' all | color_cabal_output - - echo -en 'travis_fold:end:constraint-sets-http-media-0.7\\r' + - if [ $HCNUMVER -lt 80800 ] ; then ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --constraint='http-media ==0.7.*' all | color_cabal_output ; fi + # Constraint set base-compat-0.10 + - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --constraint='base-compat ==0.10.*' all | color_cabal_output + # Constraint set base-compat-0.11 + - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --constraint='base-compat ==0.11.*' all | color_cabal_output # REGENDATA ["--config=cabal.haskell-ci","--output=.travis.yml","cabal.project"] # EOF diff --git a/cabal.haskell-ci b/cabal.haskell-ci index 9f6d4bf0..1e7d0157 100644 --- a/cabal.haskell-ci +++ b/cabal.haskell-ci @@ -1,4 +1,3 @@ -folds: all-but-test branches: master release-0.16 jobs-selection: any @@ -19,6 +18,11 @@ constraint-set http-media-0.8 constraints: http-media ==0.8.* constraint-set http-media-0.7 + ghc: <8.8 constraints: http-media ==0.7.* -head-hackage: >= 8.8 +constraint-set base-compat-0.10 + constraints: base-compat ==0.10.* + +constraint-set base-compat-0.11 + constraints: base-compat ==0.11.* diff --git a/cabal.project b/cabal.project index f6a69ff2..ff8fb435 100644 --- a/cabal.project +++ b/cabal.project @@ -41,12 +41,13 @@ constraints: memory <0.14.12 || >0.14.12 allow-newer: - servant-multipart:http-media, - servant-multipart:lens + servant-multipart-0.11.4:http-media, + servant-multipart-0.11.4:lens allow-newer: - servant-js:base, - servant-js:lens + servant-js-0.9.4:base, + servant-js-0.9.4:base-compat, + servant-js-0.9.4:lens allow-newer: -- servant-pagination:servant, servant-pagination:servant-server, @@ -56,36 +57,28 @@ allow-newer: -- servant-quickcheck allow-newer: - servant-quickcheck:base, - servant-quickcheck:hspec, - servant-quickcheck:http-client, - servant-quickcheck:http-media, - servant-quickcheck:QuickCheck, - servant-quickcheck:servant, - servant-quickcheck:servant-client, - servant-quickcheck:servant-server, - servant-quickcheck:time, - servant-quickcheck:warp + servant-quickcheck-0.0.7.4:base, + servant-quickcheck-0.0.7.4:base-compat-batteries, + servant-quickcheck-0.0.7.4:hspec, + servant-quickcheck-0.0.7.4:http-client, + servant-quickcheck-0.0.7.4:http-media, + servant-quickcheck-0.0.7.4:QuickCheck, + servant-quickcheck-0.0.7.4:servant, + servant-quickcheck-0.0.7.4:servant-client, + servant-quickcheck-0.0.7.4:servant-server, + servant-quickcheck-0.0.7.4:time, + servant-quickcheck-0.0.7.4:warp --- constraints: semigroups ^>=0.19 --- constraints: hashable ^>=1.3 --- constraints: network ^>=3.1 --- constraints: machines ^>=0.7 --- constraints: http-media ^>=0.8 +allow-newer: aeson-pretty-0.8.7:base-compat allow-newer: vault-0.3.1.2:hashable allow-newer: psqueues-0.2.7.1:hashable allow-newer: sqlite-simple-0.4.16.0:semigroups allow-newer: direct-sqlite-2.3.24:semigroups allow-newer: io-streams-1.5.1.0:network -allow-newer: io-streams:primitive +allow-newer: io-streams-1.5.1.0:primitive allow-newer: openssl-streams-1.2.2.0:network -source-repository-package - type: git - location: https://github.com/luqui/control-monad-omega.git - tag: 76c71e8917eec275ba423959f00a34583b5c7215 - -- MonadFail -- https://github.com/nurpax/sqlite-simple/issues/74 constraints: sqlite-simple < 0 diff --git a/hlint.yaml b/hlint.yaml deleted file mode 100644 index 5328fef4..00000000 --- a/hlint.yaml +++ /dev/null @@ -1,65 +0,0 @@ -# HLint configuration file -# https://github.com/ndmitchell/hlint -########################## - -# This file contains a template configuration file, which is typically -# placed as .hlint.yaml in the root of your project - - -# Specify additional command line arguments -# -# - arguments: [--color, --cpp-simple, -XQuasiQuotes] - - -# Control which extensions/flags/modules/functions can be used -# -# - extensions: -# - default: false # all extension are banned by default -# - name: [PatternGuards, ViewPatterns] # only these listed extensions can be used -# - {name: CPP, within: CrossPlatform} # CPP can only be used in a given module -# -# - flags: -# - {name: -w, within: []} # -w is allowed nowhere -# -# - modules: -# - {name: [Data.Set, Data.HashSet], as: Set} # if you import Data.Set qualified, it must be as 'Set' -# - {name: Control.Arrow, within: []} # Certain modules are banned entirely -# -# - functions: -# - {name: unsafePerformIO, within: []} # unsafePerformIO can only appear in no modules - - -# Add custom hints for this project -# -# Will suggest replacing "wibbleMany [myvar]" with "wibbleOne myvar" -# - error: {lhs: "wibbleMany [x]", rhs: wibbleOne x} - - -# Turn on hints that are off by default -# -# Ban "module X(module X) where", to require a real export list -# - warn: {name: Use explicit module export list} -# -# Replace a $ b $ c with a . b $ c -# - group: {name: dollar, enabled: true} -# -# Generalise map to fmap, ++ to <> -# - group: {name: generalise, enabled: true} - - -# Ignore some builtin hints -- ignore: {name: Redundant do} -- ignore: {name: Parse error} -- ignore: {name: Use fmap} -- ignore: {name: Use list comprehension} -- ignore: {name: Use lambda-case} -- ignore: {name: Eta reduce} -# - ignore: {name: Use const, within: SpecialModule} # Only within certain modules - - -# Define some custom infix operators -# - fixity: infixr 3 ~^#^~ - - -# To generate a suitable file for HLint do: -# $ hlint --default > .hlint.yaml diff --git a/servant-client/CHANGELOG.md b/servant-client/CHANGELOG.md index aa144cab..02f7bd85 100644 --- a/servant-client/CHANGELOG.md +++ b/servant-client/CHANGELOG.md @@ -1,6 +1,11 @@ [The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant-client/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.16.0.1 +-------- + +- Allow `base-compat-0.11` + 0.16 ---- diff --git a/servant-client/servant-client.cabal b/servant-client/servant-client.cabal index e3524615..1a91f34f 100644 --- a/servant-client/servant-client.cabal +++ b/servant-client/servant-client.cabal @@ -1,7 +1,6 @@ cabal-version: >=1.10 name: servant-client -version: 0.16 -x-revision: 3 +version: 0.16.0.1 synopsis: Automatic derivation of querying functions for servant category: Servant, Web diff --git a/servant-client/src/Servant/Client/Internal/HttpClient.hs b/servant-client/src/Servant/Client/Internal/HttpClient.hs index 1feb56d6..ec8a63e5 100644 --- a/servant-client/src/Servant/Client/Internal/HttpClient.hs +++ b/servant-client/src/Servant/Client/Internal/HttpClient.hs @@ -16,10 +16,11 @@ import Prelude.Compat import Control.Concurrent.MVar (modifyMVar, newMVar) -import qualified Data.ByteString as BS import Control.Concurrent.STM.TVar import Control.Exception + (SomeException (..), catch) import Control.Monad + (unless) import Control.Monad.Base (MonadBase (..)) import Control.Monad.Catch @@ -27,15 +28,18 @@ import Control.Monad.Catch import Control.Monad.Error.Class (MonadError (..)) import Control.Monad.IO.Class - (liftIO) + (MonadIO (..)) import Control.Monad.Reader + (MonadReader, ReaderT, ask, runReaderT) import Control.Monad.STM (STM, atomically) import Control.Monad.Trans.Control (MonadBaseControl (..)) import Control.Monad.Trans.Except + (ExceptT, runExceptT) import Data.Bifunctor (bimap) +import qualified Data.ByteString as BS import Data.ByteString.Builder (toLazyByteString) import qualified Data.ByteString.Lazy as BSL @@ -64,8 +68,8 @@ import Network.HTTP.Types (hContentType, renderQuery, statusCode) import Servant.Client.Core -import qualified Servant.Types.SourceT as S import qualified Network.HTTP.Client as Client +import qualified Servant.Types.SourceT as S -- | The environment in which a request is run. data ClientEnv diff --git a/servant-docs/CHANGELOG.md b/servant-docs/CHANGELOG.md index 5e56e234..5744be55 100644 --- a/servant-docs/CHANGELOG.md +++ b/servant-docs/CHANGELOG.md @@ -1,6 +1,11 @@ [The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant-docs/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.11.4 +------ + +- Drop dependency on `control-monad-omega` in favor of `Data.Universe.Helpers` from `universe-base`. + 0.11.3 ------ diff --git a/servant-docs/servant-docs.cabal b/servant-docs/servant-docs.cabal index 282354f9..72896d72 100644 --- a/servant-docs/servant-docs.cabal +++ b/servant-docs/servant-docs.cabal @@ -1,7 +1,6 @@ cabal-version: >=1.10 name: servant-docs -version: 0.11.3 -x-revision: 3 +version: 0.11.4 synopsis: generate API docs for your servant webservice category: Servant, Web @@ -62,12 +61,12 @@ library , aeson-pretty >= 0.8.5 && < 0.9 , base-compat >= 0.10.5 && < 0.12 , case-insensitive >= 1.2.0.11 && < 1.3 - , control-monad-omega >= 0.3.1 && < 0.4 , hashable >= 1.2.7.0 && < 1.4 , http-media >= 0.7.1.3 && < 0.9 , http-types >= 0.12.2 && < 0.13 , lens >= 4.17 && < 4.19 , string-conversions >= 0.4.0.1 && < 0.5 + , universe-base >= 1.1.1 && < 1.2 , unordered-containers >= 0.2.9.0 && < 0.3 hs-source-dirs: src diff --git a/servant-docs/src/Servant/Docs/Internal.hs b/servant-docs/src/Servant/Docs/Internal.hs index 6452ea80..051a9dbc 100644 --- a/servant-docs/src/Servant/Docs/Internal.hs +++ b/servant-docs/src/Servant/Docs/Internal.hs @@ -27,7 +27,6 @@ import Control.Arrow import Control.Lens (makeLenses, mapped, over, traversed, view, (%~), (&), (.~), (<>~), (^.), (|>)) -import qualified Control.Monad.Omega as Omega import qualified Data.ByteString.Char8 as BSC import Data.ByteString.Lazy.Char8 (ByteString) @@ -65,6 +64,8 @@ import Servant.API import Servant.API.ContentTypes import Servant.API.TypeLevel +import qualified Data.Universe.Helpers as U + import qualified Data.HashMap.Strict as HM import qualified Data.Text as T import qualified Network.HTTP.Media as M @@ -479,22 +480,22 @@ samples = map ("",) -- | Default sample Generic-based inputs/outputs. defaultSamples :: forall a. (Generic a, GToSample (Rep a)) => Proxy a -> [(Text, a)] -defaultSamples _ = Omega.runOmega $ second to <$> gtoSamples (Proxy :: Proxy (Rep a)) +defaultSamples _ = second to <$> gtoSamples (Proxy :: Proxy (Rep a)) -- | @'ToSample'@ for Generics. -- --- The use of @'Omega'@ allows for more productive sample generation. +-- Note: we use combinators from "Universe.Data.Helpers" for more productive sample generation. class GToSample t where - gtoSamples :: proxy t -> Omega.Omega (Text, t x) + gtoSamples :: proxy t -> [(Text, t x)] instance GToSample U1 where - gtoSamples _ = Omega.each (singleSample U1) + gtoSamples _ = singleSample U1 instance GToSample V1 where gtoSamples _ = empty instance (GToSample p, GToSample q) => GToSample (p :*: q) where - gtoSamples _ = render <$> ps <*> qs + gtoSamples _ = U.cartesianProduct render ps qs where ps = gtoSamples (Proxy :: Proxy p) qs = gtoSamples (Proxy :: Proxy q) @@ -503,13 +504,13 @@ instance (GToSample p, GToSample q) => GToSample (p :*: q) where | otherwise = (ta <> ", " <> tb, a :*: b) instance (GToSample p, GToSample q) => GToSample (p :+: q) where - gtoSamples _ = lefts <|> rights + gtoSamples _ = lefts U.+++ rights where lefts = second L1 <$> gtoSamples (Proxy :: Proxy p) rights = second R1 <$> gtoSamples (Proxy :: Proxy q) instance ToSample a => GToSample (K1 i a) where - gtoSamples _ = second K1 <$> Omega.each (toSamples (Proxy :: Proxy a)) + gtoSamples _ = second K1 <$> toSamples (Proxy :: Proxy a) instance (GToSample f) => GToSample (M1 i a f) where gtoSamples _ = second M1 <$> gtoSamples (Proxy :: Proxy f) diff --git a/servant-http-streams/CHANGELOG.md b/servant-http-streams/CHANGELOG.md index 7bf14e4f..19b1f6b1 100644 --- a/servant-http-streams/CHANGELOG.md +++ b/servant-http-streams/CHANGELOG.md @@ -1,6 +1,11 @@ [The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant-http-streams/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.16.0.1 +-------- + +- Allow `base-compat-0.11` + 0.16 ---- diff --git a/servant-http-streams/src/Servant/HttpStreams/Internal.hs b/servant-http-streams/src/Servant/HttpStreams/Internal.hs index 3c5fb7e4..54c920bc 100644 --- a/servant-http-streams/src/Servant/HttpStreams/Internal.hs +++ b/servant-http-streams/src/Servant/HttpStreams/Internal.hs @@ -18,6 +18,8 @@ import Control.DeepSeq (NFData, force) import Control.Exception (IOException, SomeException (..), catch, evaluate, throwIO) +import Control.Monad + (unless) import Control.Monad.Base (MonadBase (..)) import Control.Monad.Codensity @@ -25,9 +27,13 @@ import Control.Monad.Codensity import Control.Monad.Error.Class (MonadError (..)) import Control.Monad.IO.Class - (liftIO) + (MonadIO (..)) import Control.Monad.Reader + (MonadReader, ReaderT, ask, runReaderT) +import Control.Monad.Trans.Class + (lift) import Control.Monad.Trans.Except + (ExceptT, runExceptT) import Data.Bifunctor (bimap, first) import Data.ByteString.Builder diff --git a/servant/src/Servant/API/Experimental/Auth.hs b/servant/src/Servant/API/Experimental/Auth.hs index 586b4958..ecd1e8aa 100644 --- a/servant/src/Servant/API/Experimental/Auth.hs +++ b/servant/src/Servant/API/Experimental/Auth.hs @@ -1,6 +1,5 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE KindSignatures #-} {-# LANGUAGE PolyKinds #-} module Servant.API.Experimental.Auth where