git.iko.soy/typeable/http-api-data
on master help sign in
.github/workflows/haskell-ci.yml+120−43
since splitsnapshots
unifiedsplit
@@ -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.11.20210220
11+# version: 0.15.20220609
12#
12#
13−# REGENDATA ("0.11.20210220",["github","cabal.project"])
13+# REGENDATA ("0.15.20220609",["github","cabal.project"])
14#
14#
15name: Haskell-CI
15name: Haskell-CI
16on:
16on:
@@ -22,63 +22,119 @@ on:
22 - master
22 - master
23jobs:
23jobs:
24 linux:
24 linux:
25− name: Haskell-CI - Linux - GHC ${{ matrix.ghc }}
25+ name: Haskell-CI - Linux - ${{ matrix.compiler }}
26− runs-on: ubuntu-18.04
26+ runs-on: ubuntu-20.04
27+ timeout-minutes:
28+ 60
27 container:
29 container:
28 image: buildpack-deps:bionic
30 image: buildpack-deps:bionic
29 continue-on-error: ${{ matrix.allow-failure }}
31 continue-on-error: ${{ matrix.allow-failure }}
30 strategy:
32 strategy:
31 matrix:
33 matrix:
32 include:
34 include:
33− - ghc: 9.0.1
35+ - compiler: ghc-9.4.0.20220523
36+ compilerKind: ghc
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
43+ setup-method: ghcup
34 allow-failure: false
44 allow-failure: false
35− - ghc: 8.10.4
45+ - compiler: ghc-9.0.2
46+ compilerKind: ghc
47+ compilerVersion: 9.0.2
48+ setup-method: ghcup
36 allow-failure: false
49 allow-failure: false
37− - ghc: 8.8.4
50+ - compiler: ghc-8.10.7
51+ compilerKind: ghc
52+ compilerVersion: 8.10.7
53+ setup-method: ghcup
38 allow-failure: false
54 allow-failure: false
39− - ghc: 8.6.5
55+ - compiler: ghc-8.8.4
56+ compilerKind: ghc
57+ compilerVersion: 8.8.4
58+ setup-method: hvr-ppa
40 allow-failure: false
59 allow-failure: false
41− - ghc: 8.4.4
60+ - compiler: ghc-8.6.5
61+ compilerKind: ghc
62+ compilerVersion: 8.6.5
63+ setup-method: hvr-ppa
42 allow-failure: false
64 allow-failure: false
43− - ghc: 8.2.2
65+ - compiler: ghc-8.4.4
66+ compilerKind: ghc
67+ compilerVersion: 8.4.4
68+ setup-method: hvr-ppa
44 allow-failure: false
69 allow-failure: false
45− - ghc: 8.0.2
70+ - compiler: ghc-8.2.2
71+ compilerKind: ghc
72+ compilerVersion: 8.2.2
73+ setup-method: hvr-ppa
46 allow-failure: false
74 allow-failure: false
47− - ghc: 7.10.3
75+ - compiler: ghc-8.0.2
48− allow-failure: false
76+ compilerKind: ghc
49− - ghc: 7.8.4
77+ compilerVersion: 8.0.2
78+ setup-method: hvr-ppa
50 allow-failure: false
79 allow-failure: false
51 fail-fast: false
80 fail-fast: false
52 steps:
81 steps:
53 - name: apt
82 - name: apt
54 run: |
83 run: |
55 apt-get update
84 apt-get update
56− apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common
85+ apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common libtinfo5
86+ if [ "${{ matrix.setup-method }}" = ghcup ]; then
87+ mkdir -p "$HOME/.ghcup/bin"
88+ curl -sL https://downloads.haskell.org/ghcup/0.1.17.8/x86_64-linux-ghcup-0.1.17.8 > "$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
91+ "$HOME/.ghcup/bin/ghcup" install ghc "$HCVER" || (cat "$HOME"/.ghcup/logs/*.* && false)
92+ "$HOME/.ghcup/bin/ghcup" install cabal 3.6.2.0 || (cat "$HOME"/.ghcup/logs/*.* && false)
93+ else
57− apt-add-repository -y 'ppa:hvr/ghc'
94+ apt-add-repository -y 'ppa:hvr/ghc'
58− apt-get update
95+ apt-get update
59− apt-get install -y ghc-$GHC_VERSION cabal-install-3.4
96+ apt-get install -y "$HCNAME"
97+ mkdir -p "$HOME/.ghcup/bin"
98+ curl -sL https://downloads.haskell.org/ghcup/0.1.17.8/x86_64-linux-ghcup-0.1.17.8 > "$HOME/.ghcup/bin/ghcup"
99+ chmod a+x "$HOME/.ghcup/bin/ghcup"
100+ "$HOME/.ghcup/bin/ghcup" install cabal 3.6.2.0 || (cat "$HOME"/.ghcup/logs/*.* && false)
101+ fi
60 env:
102 env:
61− GHC_VERSION: ${{ matrix.ghc }}
103+ HCKIND: ${{ matrix.compilerKind }}
104+ HCNAME: ${{ matrix.compiler }}
105+ HCVER: ${{ matrix.compilerVersion }}
62 - name: Set PATH and environment variables
106 - name: Set PATH and environment variables
63 run: |
107 run: |
64 echo "$HOME/.cabal/bin" >> $GITHUB_PATH
108 echo "$HOME/.cabal/bin" >> $GITHUB_PATH
65− echo "LANG=C.UTF-8" >> $GITHUB_ENV
109+ echo "LANG=C.UTF-8" >> "$GITHUB_ENV"
66− echo "CABAL_DIR=$HOME/.cabal" >> $GITHUB_ENV
110+ echo "CABAL_DIR=$HOME/.cabal" >> "$GITHUB_ENV"
67− echo "CABAL_CONFIG=$HOME/.cabal/config" >> $GITHUB_ENV
111+ echo "CABAL_CONFIG=$HOME/.cabal/config" >> "$GITHUB_ENV"
68− HC=/opt/ghc/$GHC_VERSION/bin/ghc
112+ HCDIR=/opt/$HCKIND/$HCVER
113+ if [ "${{ matrix.setup-method }}" = ghcup ]; then
114+ HC=$HOME/.ghcup/bin/$HCKIND-$HCVER
69− echo "HC=$HC" >> $GITHUB_ENV
115+ echo "HC=$HC" >> "$GITHUB_ENV"
70− echo "HCPKG=/opt/ghc/$GHC_VERSION/bin/ghc-pkg" >> $GITHUB_ENV
116+ echo "HCPKG=$HOME/.ghcup/bin/$HCKIND-pkg-$HCVER" >> "$GITHUB_ENV"
117+ echo "HADDOCK=$HOME/.ghcup/bin/haddock-$HCVER" >> "$GITHUB_ENV"
118+ echo "CABAL=$HOME/.ghcup/bin/cabal-3.6.2.0 -vnormal+nowrap" >> "$GITHUB_ENV"
119+ else
120+ HC=$HCDIR/bin/$HCKIND
121+ echo "HC=$HC" >> "$GITHUB_ENV"
122+ echo "HCPKG=$HCDIR/bin/$HCKIND-pkg" >> "$GITHUB_ENV"
71− echo "HADDOCK=/opt/ghc/$GHC_VERSION/bin/haddock" >> $GITHUB_ENV
123+ echo "HADDOCK=$HCDIR/bin/haddock" >> "$GITHUB_ENV"
72− echo "CABAL=/opt/cabal/3.4/bin/cabal -vnormal+nowrap" >> $GITHUB_ENV
124+ echo "CABAL=$HOME/.ghcup/bin/cabal-3.6.2.0 -vnormal+nowrap" >> "$GITHUB_ENV"
125+ fi
126+
73 HCNUMVER=$(${HC} --numeric-version|perl -ne '/^(\d+)\.(\d+)\.(\d+)(\.(\d+))?$/; print(10000 * $1 + 100 * $2 + ($3 == 0 ? $5 != 1 : $3))')
127 HCNUMVER=$(${HC} --numeric-version|perl -ne '/^(\d+)\.(\d+)\.(\d+)(\.(\d+))?$/; print(10000 * $1 + 100 * $2 + ($3 == 0 ? $5 != 1 : $3))')
74− echo "HCNUMVER=$HCNUMVER" >> $GITHUB_ENV
128+ echo "HCNUMVER=$HCNUMVER" >> "$GITHUB_ENV"
75− echo "ARG_TESTS=--enable-tests" >> $GITHUB_ENV
129+ echo "ARG_TESTS=--enable-tests" >> "$GITHUB_ENV"
76− echo "ARG_BENCH=--enable-benchmarks" >> $GITHUB_ENV
130+ echo "ARG_BENCH=--enable-benchmarks" >> "$GITHUB_ENV"
77− echo "HEADHACKAGE=false" >> $GITHUB_ENV
131+ if [ $((HCNUMVER >= 90400)) -ne 0 ] ; then echo "HEADHACKAGE=true" >> "$GITHUB_ENV" ; else echo "HEADHACKAGE=false" >> "$GITHUB_ENV" ; fi
78− echo "ARG_COMPILER=--ghc --with-compiler=$HC" >> $GITHUB_ENV
132+ echo "ARG_COMPILER=--$HCKIND --with-compiler=$HC" >> "$GITHUB_ENV"
79− echo "GHCJSARITH=0" >> $GITHUB_ENV
133+ echo "GHCJSARITH=0" >> "$GITHUB_ENV"
80 env:
134 env:
81− GHC_VERSION: ${{ matrix.ghc }}
135+ HCKIND: ${{ matrix.compilerKind }}
136+ HCNAME: ${{ matrix.compiler }}
137+ HCVER: ${{ matrix.compilerVersion }}
82 - name: env
138 - name: env
83 run: |
139 run: |
84 env
140 env
@@ -101,6 +157,22 @@ jobs:
101 repository hackage.haskell.org
157 repository hackage.haskell.org
102 url: http://hackage.haskell.org/
158 url: http://hackage.haskell.org/
103 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
172+ cat >> $CABAL_CONFIG <<EOF
173+ program-default-options
174+ ghc-options: $GHCJOBS +RTS -M3G -RTS
175+ EOF
104 cat $CABAL_CONFIG
176 cat $CABAL_CONFIG
105 - name: versions
177 - name: versions
106 run: |
178 run: |
@@ -113,7 +185,7 @@ jobs:
113 - name: cache (tools)
185 - name: cache (tools)
114 uses: actions/cache@v2
186 uses: actions/cache@v2
115 with:
187 with:
116− key: ${{ runner.os }}-${{ matrix.ghc }}-tools-0d2d184d
188+ key: ${{ runner.os }}-${{ matrix.compiler }}-tools-445c2459
117 path: ~/.haskell-ci-tools
189 path: ~/.haskell-ci-tools
118 - name: install cabal-plan
190 - name: install cabal-plan
119 run: |
191 run: |
@@ -126,8 +198,8 @@ jobs:
126 cabal-plan --version
198 cabal-plan --version
127 - name: install doctest
199 - name: install doctest
128 run: |
200 run: |
129− 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
130− if [ $((HCNUMVER >= 80000 && HCNUMVER < 90000)) -ne 0 ] ; then doctest --version ; fi
202+ if [ $((HCNUMVER < 90000)) -ne 0 ] ; then doctest --version ; fi
131 - name: checkout
203 - name: checkout
132 uses: actions/checkout@v2
204 uses: actions/checkout@v2
133 with:
205 with:
@@ -148,7 +220,8 @@ jobs:
148 - name: generate cabal.project
220 - name: generate cabal.project
149 run: |
221 run: |
150 PKGDIR_http_api_data="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/http-api-data-[0-9.]*')"
222 PKGDIR_http_api_data="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/http-api-data-[0-9.]*')"
151− echo "PKGDIR_http_api_data=${PKGDIR_http_api_data}" >> $GITHUB_ENV
223+ echo "PKGDIR_http_api_data=${PKGDIR_http_api_data}" >> "$GITHUB_ENV"
224+ rm -f cabal.project cabal.project.local
152 touch cabal.project
225 touch cabal.project
153 touch cabal.project.local
226 touch cabal.project.local
154 echo "packages: ${PKGDIR_http_api_data}" >> cabal.project
227 echo "packages: ${PKGDIR_http_api_data}" >> cabal.project
@@ -156,6 +229,9 @@ jobs:
156 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
157 cat >> cabal.project <<EOF
230 cat >> cabal.project <<EOF
158 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
159 $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
160 cat cabal.project
236 cat cabal.project
161 cat cabal.project.local
237 cat cabal.project.local
@@ -166,9 +242,9 @@ jobs:
166 - name: cache
242 - name: cache
167 uses: actions/cache@v2
243 uses: actions/cache@v2
168 with:
244 with:
169− key: ${{ runner.os }}-${{ matrix.ghc }}-${{ github.sha }}
245+ key: ${{ runner.os }}-${{ matrix.compiler }}-${{ github.sha }}
170 path: ~/.cabal/store
246 path: ~/.cabal/store
171− restore-keys: ${{ runner.os }}-${{ matrix.ghc }}-
247+ restore-keys: ${{ runner.os }}-${{ matrix.compiler }}-
172 - name: install dependencies
248 - name: install dependencies
173 run: |
249 run: |
174 $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --dependencies-only -j2 all
250 $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --dependencies-only -j2 all
@@ -185,15 +261,15 @@ jobs:
185 - name: doctest
261 - name: doctest
186 run: |
262 run: |
187 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.*
188− 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
189− if [ $((HCNUMVER >= 80000 && HCNUMVER < 90000)) -ne 0 ] ; then doctest src/ ; fi
265+ if [ $((HCNUMVER < 90000)) -ne 0 ] ; then doctest -XHaskell2010 src/ ; fi
190 - name: cabal check
266 - name: cabal check
191 run: |
267 run: |
192 cd ${PKGDIR_http_api_data} || false
268 cd ${PKGDIR_http_api_data} || false
193 ${CABAL} -vnormal check
269 ${CABAL} -vnormal check
194 - name: haddock
270 - name: haddock
195 run: |
271 run: |
196− $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
197 - name: unconstrained build
273 - name: unconstrained build
198 run: |
274 run: |
199 rm -f cabal.project.local
275 rm -f cabal.project.local
@@ -203,4 +279,5 @@ jobs:
203 rm -f cabal.project.local
279 rm -f cabal.project.local
204 - name: constraint set text-show
280 - name: constraint set text-show
205 run: |
281 run: |
282+ $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --constraint='http-api-data +use-text-show' --dependencies-only -j2 all
206 $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --constraint='http-api-data +use-text-show' all
283 $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --constraint='http-api-data +use-text-show' all
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+15−28
@@ -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: 2
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,15 +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.4,
32+ GHC==8.10.7,
36− GHC==9.0.1
33+ GHC==9.0.2,
34+ GHC==9.2.3,
35+ GHC==9.4.1
37
36
38flag use-text-show
37flag use-text-show
39 description: Use text-show library for efficient ToHttpApiData implementations.
38 description: Use text-show library for efficient ToHttpApiData implementations.
@@ -45,37 +44,25 @@ library
45 include-dirs: include/
44 include-dirs: include/
46
45
47 -- GHC bundled
46 -- GHC bundled
48− build-depends: base >= 4.7 && < 4.16
47+ build-depends: base >= 4.9 && < 4.17
49− , bytestring >= 0.10.4.0 && < 0.12
48+ , bytestring >= 0.10.8.1 && < 0.12
50− , containers >= 0.5.5.1 && < 0.7
49+ , containers >= 0.5.7.1 && < 0.7
51− , text >= 1.2.3.0 && < 1.3
50+ , text >= 1.2.3.0 && < 1.3 || >=2.0 && <2.1
52− , transformers >= 0.3 && < 0.6
51+ , transformers >= 0.5.2.0 && < 0.7
53−
54− -- so Semigroup Builder exists
55− if impl(ghc >= 8.0)
56− build-depends: bytestring >= 0.10.8.1
57
52
58 -- other-dependencies
53 -- other-dependencies
59 build-depends:
54 build-depends:
60 attoparsec >= 0.13.2.2 && < 0.15
55 attoparsec >= 0.13.2.2 && < 0.15
61− , attoparsec-iso8601 >= 1.0.2.0 && < 1.1
56+ , attoparsec-iso8601 >= 1.1.0.0 && < 1.2
62− , base-compat >= 0.10.5 && < 0.12
57+ , base-compat >= 0.10.5 && < 0.13
63 , cookie >= 0.4.3 && < 0.5
58 , cookie >= 0.4.3 && < 0.5
64− , hashable >= 1.2.7.0 && < 1.4
59+ , hashable >= 1.2.7.0 && < 1.5
65 , http-types >= 0.12.3 && < 0.13
60 , http-types >= 0.12.3 && < 0.13
66 , tagged >= 0.8.5 && < 0.9
61 , tagged >= 0.8.5 && < 0.9
67 , time-compat >= 1.9.5 && < 1.10
62 , time-compat >= 1.9.5 && < 1.10
68 , unordered-containers >= 0.2.10.0 && < 0.3
63 , unordered-containers >= 0.2.10.0 && < 0.3
69 , uuid-types >= 1.0.3 && < 1.1
64 , uuid-types >= 1.0.3 && < 1.1
70
65
71− if !impl(ghc >= 7.10)
72− build-depends:
73− nats >= 1.1.2 && < 1.2,
74− void >= 0.7.3 && < 0.8
75−
76− if !impl(ghc >= 8.0)
77− build-depends: semigroups >= 0.18.5 && < 0.20
78−
79 if flag(use-text-show)
66 if flag(use-text-show)
80 cpp-options: -DUSE_TEXT_SHOW
67 cpp-options: -DUSE_TEXT_SHOW
81 build-depends: text-show >= 3.8.2 && <3.10
68 build-depends: text-show >= 3.8.2 && <3.10
@@ -98,7 +85,7 @@ test-suite spec
98 hs-source-dirs: test
85 hs-source-dirs: test
99 ghc-options: -Wall
86 ghc-options: -Wall
100 default-language: Haskell2010
87 default-language: Haskell2010
101− build-tool-depends: hspec-discover:hspec-discover >= 2.7.1 && <2.8
88+ build-tool-depends: hspec-discover:hspec-discover >= 2.7.1 && <2.11
102 -- inherited depndencies
89 -- inherited depndencies
103 build-depends:
90 build-depends:
104 base
91 base
@@ -115,7 +102,7 @@ test-suite spec
115 build-depends: nats
102 build-depends: nats
116
103
117 build-depends: HUnit >= 1.6.0.0 && <1.7
104 build-depends: HUnit >= 1.6.0.0 && <1.7
118− , hspec >= 2.7.1 && <2.8
105+ , hspec >= 2.7.1 && <2.11
119 , QuickCheck >= 2.13.1 && <2.15
106 , QuickCheck >= 2.13.1 && <2.15
120 , quickcheck-instances >= 0.3.25.2 && <0.4
107 , quickcheck-instances >= 0.3.25.2 && <0.4
121
108
src/Web/Internal/HttpApiData.hs+3−10
@@ -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
@@ -101,7 +96,7 @@ class ToHttpApiData a where
101 -- The default definition uses 'H.encodePathSegmentsRelative',
96 -- The default definition uses 'H.encodePathSegmentsRelative',
102 -- but this may be overriden with a more efficient version.
97 -- but this may be overriden with a more efficient version.
103 toEncodedUrlPiece :: a -> BS.Builder
98 toEncodedUrlPiece :: a -> BS.Builder
104− toEncodedUrlPiece = H.encodePathSegmentsRelative . (:[]) . toUrlPiece
99+ toEncodedUrlPiece = H.urlEncodeBuilder True . encodeUtf8 . toUrlPiece
105
100
106 -- | Convert to HTTP header value.
101 -- | Convert to HTTP header value.
107 toHeader :: a -> ByteString
102 toHeader :: a -> ByteString
@@ -519,7 +514,7 @@ instance ToHttpApiData DayOfWeek where
519
514
520 toEncodedUrlPiece = unsafeToEncodedUrlPiece
515 toEncodedUrlPiece = unsafeToEncodedUrlPiece
521
516
522−-- |
517+-- |
523-- >>> toUrlPiece Q4
518-- >>> toUrlPiece Q4
524-- "q4"
519-- "q4"
525instance ToHttpApiData QuarterOfYear where
520instance ToHttpApiData QuarterOfYear where
@@ -870,5 +865,3 @@ runAtto :: Atto.Parser a -> Text -> Either Text a
870runAtto p t = case Atto.parseOnly (p <* Atto.endOfInput) t of
865runAtto p t = case Atto.parseOnly (p <* Atto.endOfInput) t of
871 Left err -> Left (T.pack err)
866 Left err -> Left (T.pack err)
872 Right x -> Right x
867 Right x -> Right x
873−
874−