git.iko.soy/typeable/http-api-data
on master help sign in
Merge pull request #118 from fizruk/http-api-data-1.1
d2573ceOleg Grenrus
.github/workflows/haskell-ci.yml+41−30
@@ -8,9 +8,9 @@
8#
8#
9# For more information, see https://github.com/haskell-CI/haskell-ci
9# For more information, see https://github.com/haskell-CI/haskell-ci
10#
10#
11−# version: 0.13.20211111
11+# version: 0.15.20220609
12#
12#
13−# REGENDATA ("0.13.20211111",["github","cabal.project"])
13+# REGENDATA ("0.15.20220609",["github","cabal.project"])
14#
14#
15name: Haskell-CI
15name: Haskell-CI
16on:
16on:
@@ -23,7 +23,7 @@ on:
23jobs:
23jobs:
24 linux:
24 linux:
25 name: Haskell-CI - Linux - ${{ matrix.compiler }}
25 name: Haskell-CI - Linux - ${{ matrix.compiler }}
26− runs-on: ubuntu-18.04
26+ runs-on: ubuntu-20.04
27 timeout-minutes:
27 timeout-minutes:
28 60
28 60
29 container:
29 container:
@@ -32,15 +32,20 @@ jobs:
32 strategy:
32 strategy:
33 matrix:
33 matrix:
34 include:
34 include:
35− - compiler: ghc-9.2.1
35+ - compiler: ghc-9.4.0.20220523
36 compilerKind: ghc
36 compilerKind: ghc
37− compilerVersion: 9.2.1
37+ compilerVersion: 9.4.0.20220523
38+ setup-method: ghcup
39+ allow-failure: true
40+ - compiler: ghc-9.2.3
41+ compilerKind: ghc
42+ compilerVersion: 9.2.3
38 setup-method: ghcup
43 setup-method: ghcup
39 allow-failure: false
44 allow-failure: false
40− - compiler: ghc-9.0.1
45+ - compiler: ghc-9.0.2
41 compilerKind: ghc
46 compilerKind: ghc
42− compilerVersion: 9.0.1
47+ compilerVersion: 9.0.2
43− setup-method: hvr-ppa
48+ setup-method: ghcup
44 allow-failure: false
49 allow-failure: false
45 - compiler: ghc-8.10.7
50 - compiler: ghc-8.10.7
46 compilerKind: ghc
51 compilerKind: ghc
@@ -72,16 +77,6 @@ jobs:
72 compilerVersion: 8.0.2
77 compilerVersion: 8.0.2
73 setup-method: hvr-ppa
78 setup-method: hvr-ppa
74 allow-failure: false
79 allow-failure: false
75− - compiler: ghc-7.10.3
76− compilerKind: ghc
77− compilerVersion: 7.10.3
78− setup-method: hvr-ppa
79− allow-failure: false
80− - compiler: ghc-7.8.4
81− compilerKind: ghc
82− compilerVersion: 7.8.4
83− setup-method: hvr-ppa
84− allow-failure: false
85 fail-fast: false
80 fail-fast: false
86 steps:
81 steps:
87 - name: apt
82 - name: apt
@@ -90,18 +85,19 @@ jobs:
90 apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common libtinfo5
85 apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common libtinfo5
91 if [ "${{ matrix.setup-method }}" = ghcup ]; then
86 if [ "${{ matrix.setup-method }}" = ghcup ]; then
92 mkdir -p "$HOME/.ghcup/bin"
87 mkdir -p "$HOME/.ghcup/bin"
93− curl -sL https://downloads.haskell.org/ghcup/0.1.17.3/x86_64-linux-ghcup-0.1.17.3 > "$HOME/.ghcup/bin/ghcup"
88+ curl -sL https://downloads.haskell.org/ghcup/0.1.17.8/x86_64-linux-ghcup-0.1.17.8 > "$HOME/.ghcup/bin/ghcup"
94 chmod a+x "$HOME/.ghcup/bin/ghcup"
89 chmod a+x "$HOME/.ghcup/bin/ghcup"
90+ if $HEADHACKAGE; then "$HOME/.ghcup/bin/ghcup" config add-release-channel https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.7.yaml; fi
95− "$HOME/.ghcup/bin/ghcup" install ghc "$HCVER"
91+ "$HOME/.ghcup/bin/ghcup" install ghc "$HCVER" || (cat "$HOME"/.ghcup/logs/*.* && false)
96− "$HOME/.ghcup/bin/ghcup" install cabal 3.6.2.0
92+ "$HOME/.ghcup/bin/ghcup" install cabal 3.6.2.0 || (cat "$HOME"/.ghcup/logs/*.* && false)
97 else
93 else
98 apt-add-repository -y 'ppa:hvr/ghc'
94 apt-add-repository -y 'ppa:hvr/ghc'
99 apt-get update
95 apt-get update
100 apt-get install -y "$HCNAME"
96 apt-get install -y "$HCNAME"
101 mkdir -p "$HOME/.ghcup/bin"
97 mkdir -p "$HOME/.ghcup/bin"
102− curl -sL https://downloads.haskell.org/ghcup/0.1.17.3/x86_64-linux-ghcup-0.1.17.3 > "$HOME/.ghcup/bin/ghcup"
98+ curl -sL https://downloads.haskell.org/ghcup/0.1.17.8/x86_64-linux-ghcup-0.1.17.8 > "$HOME/.ghcup/bin/ghcup"
103 chmod a+x "$HOME/.ghcup/bin/ghcup"
99 chmod a+x "$HOME/.ghcup/bin/ghcup"
104− "$HOME/.ghcup/bin/ghcup" install cabal 3.6.2.0
100+ "$HOME/.ghcup/bin/ghcup" install cabal 3.6.2.0 || (cat "$HOME"/.ghcup/logs/*.* && false)
105 fi
101 fi
106 env:
102 env:
107 HCKIND: ${{ matrix.compilerKind }}
103 HCKIND: ${{ matrix.compilerKind }}
@@ -132,7 +128,7 @@ jobs:
132 echo "HCNUMVER=$HCNUMVER" >> "$GITHUB_ENV"
128 echo "HCNUMVER=$HCNUMVER" >> "$GITHUB_ENV"
133 echo "ARG_TESTS=--enable-tests" >> "$GITHUB_ENV"
129 echo "ARG_TESTS=--enable-tests" >> "$GITHUB_ENV"
134 echo "ARG_BENCH=--enable-benchmarks" >> "$GITHUB_ENV"
130 echo "ARG_BENCH=--enable-benchmarks" >> "$GITHUB_ENV"
135− echo "HEADHACKAGE=false" >> "$GITHUB_ENV"
131+ if [ $((HCNUMVER >= 90400)) -ne 0 ] ; then echo "HEADHACKAGE=true" >> "$GITHUB_ENV" ; else echo "HEADHACKAGE=false" >> "$GITHUB_ENV" ; fi
136 echo "ARG_COMPILER=--$HCKIND --with-compiler=$HC" >> "$GITHUB_ENV"
132 echo "ARG_COMPILER=--$HCKIND --with-compiler=$HC" >> "$GITHUB_ENV"
137 echo "GHCJSARITH=0" >> "$GITHUB_ENV"
133 echo "GHCJSARITH=0" >> "$GITHUB_ENV"
138 env:
134 env:
@@ -161,6 +157,18 @@ jobs:
161 repository hackage.haskell.org
157 repository hackage.haskell.org
162 url: http://hackage.haskell.org/
158 url: http://hackage.haskell.org/
163 EOF
159 EOF
160+ if $HEADHACKAGE; then
161+ cat >> $CABAL_CONFIG <<EOF
162+ repository head.hackage.ghc.haskell.org
163+ url: https://ghc.gitlab.haskell.org/head.hackage/
164+ secure: True
165+ root-keys: 7541f32a4ccca4f97aea3b22f5e593ba2c0267546016b992dfadcd2fe944e55d
166+ 26021a13b401500c8eb2761ca95c61f2d625bfef951b939a8124ed12ecf07329
167+ f76d08be13e9a61a377a85e2fb63f4c5435d40f8feb3e12eb05905edb8cdea89
168+ key-threshold: 3
169+ active-repositories: hackage.haskell.org, head.hackage.ghc.haskell.org:override
170+ EOF
171+ fi
164 cat >> $CABAL_CONFIG <<EOF
172 cat >> $CABAL_CONFIG <<EOF
165 program-default-options
173 program-default-options
166 ghc-options: $GHCJOBS +RTS -M3G -RTS
174 ghc-options: $GHCJOBS +RTS -M3G -RTS
@@ -177,7 +185,7 @@ jobs:
177 - name: cache (tools)
185 - name: cache (tools)
178 uses: actions/cache@v2
186 uses: actions/cache@v2
179 with:
187 with:
180− key: ${{ runner.os }}-${{ matrix.compiler }}-tools-13a8fe6d
188+ key: ${{ runner.os }}-${{ matrix.compiler }}-tools-445c2459
181 path: ~/.haskell-ci-tools
189 path: ~/.haskell-ci-tools
182 - name: install cabal-plan
190 - name: install cabal-plan
183 run: |
191 run: |
@@ -190,8 +198,8 @@ jobs:
190 cabal-plan --version
198 cabal-plan --version
191 - name: install doctest
199 - name: install doctest
192 run: |
200 run: |
193− if [ $((HCNUMVER >= 80000 && HCNUMVER < 90000)) -ne 0 ] ; then $CABAL --store-dir=$HOME/.haskell-ci-tools/store v2-install $ARG_COMPILER --ignore-project -j2 doctest --constraint='doctest ^>=0.17' ; fi
201+ if [ $((HCNUMVER < 90000)) -ne 0 ] ; then $CABAL --store-dir=$HOME/.haskell-ci-tools/store v2-install $ARG_COMPILER --ignore-project -j2 doctest --constraint='doctest ^>=0.20' ; fi
194− if [ $((HCNUMVER >= 80000 && HCNUMVER < 90000)) -ne 0 ] ; then doctest --version ; fi
202+ if [ $((HCNUMVER < 90000)) -ne 0 ] ; then doctest --version ; fi
195 - name: checkout
203 - name: checkout
196 uses: actions/checkout@v2
204 uses: actions/checkout@v2
197 with:
205 with:
@@ -221,6 +229,9 @@ jobs:
221 if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi
229 if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi
222 cat >> cabal.project <<EOF
230 cat >> cabal.project <<EOF
223 EOF
231 EOF
232+ if $HEADHACKAGE; then
233+ echo "allow-newer: $($HCPKG list --simple-output | sed -E 's/([a-zA-Z-]+)-[0-9.]+/*:\1,/g')" >> cabal.project
234+ fi
224 $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: $_ installed\n" unless /^(http-api-data)$/; }' >> cabal.project.local
235 $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: $_ installed\n" unless /^(http-api-data)$/; }' >> cabal.project.local
225 cat cabal.project
236 cat cabal.project
226 cat cabal.project.local
237 cat cabal.project.local
@@ -250,15 +261,15 @@ jobs:
250 - name: doctest
261 - name: doctest
251 run: |
262 run: |
252 perl -i -e 'while (<ARGV>) { print unless /package-id\s+(base-compat)-\d+(\.\d+)*/; }' .ghc.environment.*
263 perl -i -e 'while (<ARGV>) { print unless /package-id\s+(base-compat)-\d+(\.\d+)*/; }' .ghc.environment.*
253− if [ $((HCNUMVER >= 80000 && HCNUMVER < 90000)) -ne 0 ] ; then cd ${PKGDIR_http_api_data} || false ; fi
264+ if [ $((HCNUMVER < 90000)) -ne 0 ] ; then cd ${PKGDIR_http_api_data} || false ; fi
254− if [ $((HCNUMVER >= 80000 && HCNUMVER < 90000)) -ne 0 ] ; then doctest src/ ; fi
265+ if [ $((HCNUMVER < 90000)) -ne 0 ] ; then doctest -XHaskell2010 src/ ; fi
255 - name: cabal check
266 - name: cabal check
256 run: |
267 run: |
257 cd ${PKGDIR_http_api_data} || false
268 cd ${PKGDIR_http_api_data} || false
258 ${CABAL} -vnormal check
269 ${CABAL} -vnormal check
259 - name: haddock
270 - name: haddock
260 run: |
271 run: |
261− $CABAL v2-haddock $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all
272+ $CABAL v2-haddock --haddock-all $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all
262 - name: unconstrained build
273 - name: unconstrained build
263 run: |
274 run: |
264 rm -f cabal.project.local
275 rm -f cabal.project.local
CHANGELOG.md+7
@@ -1,3 +1,10 @@
1+0.5
2+---
3+
4+* Use `attoparsec-iso8601-1.1.0.0`.
5+ `Day` and `UTCTime` parsers require at least 4 digits now, which is a breaking change.
6+* Drop GHC-7.8 and GHC-7.10 support.
7+
10.4.3
80.4.3
2-----
9-----
3
10
http-api-data.cabal+11−25
@@ -1,7 +1,6 @@
1cabal-version: >= 1.10
1cabal-version: >= 1.10
2name: http-api-data
2name: http-api-data
3−version: 0.4.3
3+version: 0.5
4−x-revision: 6
5
4
6synopsis: Converting to/from HTTP API data like URL pieces, headers and query parameters.
5synopsis: Converting to/from HTTP API data like URL pieces, headers and query parameters.
7category: Web
6category: Web
@@ -25,16 +24,15 @@ extra-source-files:
25 README.md
24 README.md
26
25
27tested-with:
26tested-with:
28− GHC==7.8.4,
29− GHC==7.10.3,
30 GHC==8.0.2,
27 GHC==8.0.2,
31 GHC==8.2.2,
28 GHC==8.2.2,
32 GHC==8.4.4,
29 GHC==8.4.4,
33 GHC==8.6.5,
30 GHC==8.6.5,
34 GHC==8.8.4,
31 GHC==8.8.4,
35 GHC==8.10.7,
32 GHC==8.10.7,
36− GHC==9.0.1,
33+ GHC==9.0.2,
37− GHC==9.2.1
34+ GHC==9.2.3,
35+ GHC==9.4.1
38
36
39flag use-text-show
37flag use-text-show
40 description: Use text-show library for efficient ToHttpApiData implementations.
38 description: Use text-show library for efficient ToHttpApiData implementations.
@@ -46,20 +44,16 @@ library
46 include-dirs: include/
44 include-dirs: include/
47
45
48 -- GHC bundled
46 -- GHC bundled
49− build-depends: base >= 4.7 && < 4.17
47+ build-depends: base >= 4.9 && < 4.17
50− , bytestring >= 0.10.4.0 && < 0.12
48+ , bytestring >= 0.10.8.1 && < 0.12
51− , containers >= 0.5.5.1 && < 0.7
49+ , containers >= 0.5.7.1 && < 0.7
52 , text >= 1.2.3.0 && < 1.3 || >=2.0 && <2.1
50 , text >= 1.2.3.0 && < 1.3 || >=2.0 && <2.1
53− , transformers >= 0.3 && < 0.7
51+ , transformers >= 0.5.2.0 && < 0.7
54−
55− -- so Semigroup Builder exists
56− if impl(ghc >= 8.0)
57− build-depends: bytestring >= 0.10.8.1
58
52
59 -- other-dependencies
53 -- other-dependencies
60 build-depends:
54 build-depends:
61 attoparsec >= 0.13.2.2 && < 0.15
55 attoparsec >= 0.13.2.2 && < 0.15
62− , attoparsec-iso8601 >= 1.0.2.0 && < 1.1
56+ , attoparsec-iso8601 >= 1.1.0.0 && < 1.2
63 , base-compat >= 0.10.5 && < 0.13
57 , base-compat >= 0.10.5 && < 0.13
64 , cookie >= 0.4.3 && < 0.5
58 , cookie >= 0.4.3 && < 0.5
65 , hashable >= 1.2.7.0 && < 1.5
59 , hashable >= 1.2.7.0 && < 1.5
@@ -69,14 +63,6 @@ library
69 , unordered-containers >= 0.2.10.0 && < 0.3
63 , unordered-containers >= 0.2.10.0 && < 0.3
70 , uuid-types >= 1.0.3 && < 1.1
64 , uuid-types >= 1.0.3 && < 1.1
71
65
72− if !impl(ghc >= 7.10)
73− build-depends:
74− nats >= 1.1.2 && < 1.2,
75− void >= 0.7.3 && < 0.8
76−
77− if !impl(ghc >= 8.0)
78− build-depends: semigroups >= 0.18.5 && < 0.21
79−
80 if flag(use-text-show)
66 if flag(use-text-show)
81 cpp-options: -DUSE_TEXT_SHOW
67 cpp-options: -DUSE_TEXT_SHOW
82 build-depends: text-show >= 3.8.2 && <3.10
68 build-depends: text-show >= 3.8.2 && <3.10
@@ -99,7 +85,7 @@ test-suite spec
99 hs-source-dirs: test
85 hs-source-dirs: test
100 ghc-options: -Wall
86 ghc-options: -Wall
101 default-language: Haskell2010
87 default-language: Haskell2010
102− build-tool-depends: hspec-discover:hspec-discover >= 2.7.1 && <2.10
88+ build-tool-depends: hspec-discover:hspec-discover >= 2.7.1 && <2.11
103 -- inherited depndencies
89 -- inherited depndencies
104 build-depends:
90 build-depends:
105 base
91 base
@@ -116,7 +102,7 @@ test-suite spec
116 build-depends: nats
102 build-depends: nats
117
103
118 build-depends: HUnit >= 1.6.0.0 && <1.7
104 build-depends: HUnit >= 1.6.0.0 && <1.7
119− , hspec >= 2.7.1 && <2.10
105+ , hspec >= 2.7.1 && <2.11
120 , QuickCheck >= 2.13.1 && <2.15
106 , QuickCheck >= 2.13.1 && <2.15
121 , quickcheck-instances >= 0.3.25.2 && <0.4
107 , quickcheck-instances >= 0.3.25.2 && <0.4
122
108
src/Web/Internal/HttpApiData.hs+1−6
@@ -32,6 +32,7 @@ import Data.Data (Data)
32import qualified Data.Fixed as F
32import qualified Data.Fixed as F
33import Data.Functor.Identity (Identity(Identity))
33import Data.Functor.Identity (Identity(Identity))
34import Data.Int (Int16, Int32, Int64, Int8)
34import Data.Int (Int16, Int32, Int64, Int8)
35+import Data.Kind (Type)
35import qualified Data.Map as Map
36import qualified Data.Map as Map
36import Data.Monoid (All (..), Any (..), Dual (..),
37import Data.Monoid (All (..), Any (..), Dual (..),
37 First (..), Last (..),
38 First (..), Last (..),
@@ -71,12 +72,6 @@ import Text.Read (readMaybe)
71import Web.Cookie (SetCookie, parseSetCookie,
72import Web.Cookie (SetCookie, parseSetCookie,
72 renderSetCookie)
73 renderSetCookie)
73
74
74−#if MIN_VERSION_base(4,9,0)
75−import Data.Kind (Type)
76−#else
77−#define Type *
78−#endif
79−
80#if USE_TEXT_SHOW
75#if USE_TEXT_SHOW
81import TextShow (TextShow, showt)
76import TextShow (TextShow, showt)
82#endif
77#endif