From 1cdf4eaa64270884ea9cbabf8736d89f81a9d9bb Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Mon, 29 Sep 2025 07:48:07 -0400 Subject: [PATCH 1/5] Regenerate CI --- .github/workflows/haskell-ci.yml | 21 +++++++++++++-------- text-show.cabal | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/.github/workflows/haskell-ci.yml b/.github/workflows/haskell-ci.yml index 391bc98..ef1bace 100644 --- a/.github/workflows/haskell-ci.yml +++ b/.github/workflows/haskell-ci.yml @@ -8,14 +8,15 @@ # # For more information, see https://github.com/haskell-CI/haskell-ci # -# version: 0.19.20250605 +# version: 0.19.20250917 # -# REGENDATA ("0.19.20250605",["github","--config=cabal.haskell-ci","cabal.project"]) +# REGENDATA ("0.19.20250917",["github","--config=cabal.haskell-ci","cabal.project"]) # name: Haskell-CI on: - push - pull_request + - merge_group jobs: linux: name: Haskell-CI - Linux - ${{ matrix.compiler }} @@ -33,9 +34,9 @@ jobs: compilerVersion: 9.12.2 setup-method: ghcup allow-failure: false - - compiler: ghc-9.10.2 + - compiler: ghc-9.10.3 compilerKind: ghc - compilerVersion: 9.10.2 + compilerVersion: 9.10.3 setup-method: ghcup allow-failure: false - compiler: ghc-9.8.4 @@ -106,8 +107,8 @@ jobs: chmod a+x "$HOME/.ghcup/bin/ghcup" - name: Install cabal-install run: | - "$HOME/.ghcup/bin/ghcup" install cabal 3.14.2.0 || (cat "$HOME"/.ghcup/logs/*.* && false) - echo "CABAL=$HOME/.ghcup/bin/cabal-3.14.2.0 -vnormal+nowrap" >> "$GITHUB_ENV" + "$HOME/.ghcup/bin/ghcup" install cabal 3.16.0.0 || (cat "$HOME"/.ghcup/logs/*.* && false) + echo "CABAL=$HOME/.ghcup/bin/cabal-3.16.0.0 -vnormal+nowrap" >> "$GITHUB_ENV" - name: Install GHC (GHCup) if: matrix.setup-method == 'ghcup' run: | @@ -183,7 +184,7 @@ jobs: chmod a+x $HOME/.cabal/bin/cabal-plan cabal-plan --version - name: checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: source - name: initial cabal.project for sdist @@ -208,7 +209,11 @@ jobs: touch cabal.project.local echo "packages: ${PKGDIR_text_show}" >> cabal.project if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package text-show" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi + if [ $((HCNUMVER >= 90400)) -ne 0 ] ; then echo "package text-show" >> cabal.project ; fi + if [ $((HCNUMVER >= 90400)) -ne 0 ] ; then echo " ghc-options: -Werror=unused-packages" >> cabal.project ; fi + if [ $((HCNUMVER >= 90000)) -ne 0 ] ; then echo "package text-show" >> cabal.project ; fi + if [ $((HCNUMVER >= 90000)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi cat >> cabal.project <=1.10 From 5e74eb8ca15e31f7374ee566435cbef2bb683c4e Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Mon, 29 Sep 2025 07:52:25 -0400 Subject: [PATCH 2/5] Make the test suite pass with base-4.22.* (GHC 9.14) Fixes #66. --- CHANGELOG.md | 3 +++ src/TextShow/Data/Typeable.hs | 5 +++++ text-show.cabal | 12 ++++++------ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index be0d5d2..fa74a05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +### next [????.??.??] +* Make the test suite pass with `base-4.22.*` (GHC 9.14). + ### 3.11.2 [2025.06.17] * Support building with the GHC JavaScript backend. diff --git a/src/TextShow/Data/Typeable.hs b/src/TextShow/Data/Typeable.hs index db90772..9b351f9 100644 --- a/src/TextShow/Data/Typeable.hs +++ b/src/TextShow/Data/Typeable.hs @@ -97,8 +97,13 @@ tc'Unlifted = tyConOf (Proxy :: Proxy 'PtrRepUnlifted) #if MIN_VERSION_base(4,20,0) isTupleTyCon :: TyCon -> Maybe (Bool, Int) isTupleTyCon tc +# if MIN_VERSION_base(4,22,0) + | tyConPackage tc == "ghc-internal" + , tyConModule tc == "GHC.Internal.Tuple" || tyConModule tc == "GHC.Internal.Types" +# else | tyConPackage tc == "ghc-prim" , tyConModule tc == "GHC.Tuple" || tyConModule tc == "GHC.Types" +# endif = case tyConName tc of "Unit" -> Just (True, 0) "Unit#" -> Just (False, 0) diff --git a/text-show.cabal b/text-show.cabal index 65f443e..4717ec4 100644 --- a/text-show.cabal +++ b/text-show.cabal @@ -150,14 +150,14 @@ library TextShow.TH.Names TextShow.Utils build-depends: array >= 0.3 && < 0.6 - , base >= 4.9 && < 4.22 + , base >= 4.9 && < 4.23 , base-compat-batteries >= 0.11 && < 0.15 , bifunctors >= 5.1 && < 6 , bytestring >= 0.10.8.1 && < 0.13 , containers >= 0.1 && < 0.9 - , ghc-boot-th >= 8.0 && < 9.13 + , ghc-boot-th >= 8.0 && < 9.15 , ghc-prim - , template-haskell >= 2.11 && < 2.24 + , template-haskell >= 2.11 && < 2.25 , text >= 1.1 && < 2.2 , th-abstraction >= 0.5 && < 0.8 , transformers >= 0.5 && < 0.7 @@ -302,7 +302,7 @@ test-suite spec TextShow.TH.Names build-depends: array >= 0.3 && < 0.6 - , base >= 4.9 && < 4.22 + , base >= 4.9 && < 4.23 , base-compat-batteries >= 0.11 && < 0.15 , base-orphans >= 0.8.5 && < 0.10 , bytestring >= 0.10.8.1 && < 0.13 @@ -312,7 +312,7 @@ test-suite spec , hspec >= 2 && < 3 , QuickCheck >= 2.14.3 && < 2.17 , quickcheck-instances >= 0.3.28 && < 0.4 - , template-haskell >= 2.11 && < 2.24 + , template-haskell >= 2.11 && < 2.25 , text >= 1.1 && < 2.2 , text-show , transformers >= 0.5 && < 0.7 @@ -330,7 +330,7 @@ test-suite spec benchmark bench type: exitcode-stdio-1.0 main-is: Bench.hs - build-depends: base >= 4.9 && < 4.22 + build-depends: base >= 4.9 && < 4.23 , criterion >= 1.1.4 && < 2 , deepseq >= 1.3 && < 2 , ghc-prim From a9b7096139bd6b1105a25ebfd693de8e284c4a26 Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Mon, 29 Sep 2025 07:52:57 -0400 Subject: [PATCH 3/5] CI: Test GHC 9.14.1 --- .github/workflows/haskell-ci.yml | 37 +++++++++++++++++++++++++++++++- text-show.cabal | 1 + 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/.github/workflows/haskell-ci.yml b/.github/workflows/haskell-ci.yml index ef1bace..c76e1a2 100644 --- a/.github/workflows/haskell-ci.yml +++ b/.github/workflows/haskell-ci.yml @@ -29,6 +29,11 @@ jobs: strategy: matrix: include: + - compiler: ghc-9.14.0.20250908 + compilerKind: ghc + compilerVersion: 9.14.0.20250908 + setup-method: ghcup-prerelease + allow-failure: false - compiler: ghc-9.12.2 compilerKind: ghc compilerVersion: 9.12.2 @@ -123,6 +128,21 @@ jobs: HCKIND: ${{ matrix.compilerKind }} HCNAME: ${{ matrix.compiler }} HCVER: ${{ matrix.compilerVersion }} + - name: Install GHC (GHCup prerelease) + if: matrix.setup-method == 'ghcup-prerelease' + run: | + "$HOME/.ghcup/bin/ghcup" config add-release-channel prereleases + "$HOME/.ghcup/bin/ghcup" install ghc "$HCVER" || (cat "$HOME"/.ghcup/logs/*.* && false) + HC=$("$HOME/.ghcup/bin/ghcup" whereis ghc "$HCVER") + HCPKG=$(echo "$HC" | sed 's#ghc$#ghc-pkg#') + HADDOCK=$(echo "$HC" | sed 's#ghc$#haddock#') + echo "HC=$HC" >> "$GITHUB_ENV" + echo "HCPKG=$HCPKG" >> "$GITHUB_ENV" + echo "HADDOCK=$HADDOCK" >> "$GITHUB_ENV" + env: + HCKIND: ${{ matrix.compilerKind }} + HCNAME: ${{ matrix.compiler }} + HCVER: ${{ matrix.compilerVersion }} - name: Set PATH and environment variables run: | echo "$HOME/.cabal/bin" >> $GITHUB_PATH @@ -133,7 +153,7 @@ jobs: echo "HCNUMVER=$HCNUMVER" >> "$GITHUB_ENV" echo "ARG_TESTS=--enable-tests" >> "$GITHUB_ENV" echo "ARG_BENCH=--enable-benchmarks" >> "$GITHUB_ENV" - echo "HEADHACKAGE=false" >> "$GITHUB_ENV" + if [ $((HCNUMVER >= 91400)) -ne 0 ] ; then echo "HEADHACKAGE=true" >> "$GITHUB_ENV" ; else echo "HEADHACKAGE=false" >> "$GITHUB_ENV" ; fi echo "ARG_COMPILER=--$HCKIND --with-compiler=$HC" >> "$GITHUB_ENV" env: HCKIND: ${{ matrix.compilerKind }} @@ -161,6 +181,18 @@ jobs: repository hackage.haskell.org url: http://hackage.haskell.org/ EOF + if $HEADHACKAGE; then + cat >> $CABAL_CONFIG <> $CABAL_CONFIG <> cabal.project + fi $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: any.$_ installed\n" unless /^(text-show)$/; }' >> cabal.project.local cat cabal.project cat cabal.project.local diff --git a/text-show.cabal b/text-show.cabal index 4717ec4..0a2b5a6 100644 --- a/text-show.cabal +++ b/text-show.cabal @@ -65,6 +65,7 @@ tested-with: GHC == 8.0.2 , GHC == 9.8.4 , GHC == 9.10.3 , GHC == 9.12.2 + , GHC == 9.14.1 extra-source-files: CHANGELOG.md, README.md cabal-version: >=1.10 From 9391b06d234df41bc54235264779f27201ce5237 Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Mon, 29 Sep 2025 08:13:54 -0400 Subject: [PATCH 4/5] Remove unused transformers{,-compat} and ghc-prim dependencies --- text-show.cabal | 4 ---- 1 file changed, 4 deletions(-) diff --git a/text-show.cabal b/text-show.cabal index 0a2b5a6..76a32d7 100644 --- a/text-show.cabal +++ b/text-show.cabal @@ -161,8 +161,6 @@ library , template-haskell >= 2.11 && < 2.25 , text >= 1.1 && < 2.2 , th-abstraction >= 0.5 && < 0.8 - , transformers >= 0.5 && < 0.7 - , transformers-compat >= 0.5 && < 1 -- integer-gmp is only needed on pre-9.0 versions of GHC, as GHC 9.0+ add -- enough functionality to base to avoid the use of integer-gmp entirely. @@ -316,7 +314,6 @@ test-suite spec , template-haskell >= 2.11 && < 2.25 , text >= 1.1 && < 2.2 , text-show - , transformers >= 0.5 && < 0.7 , transformers-compat >= 0.5 && < 1 build-tool-depends: hspec-discover:hspec-discover @@ -334,7 +331,6 @@ benchmark bench build-depends: base >= 4.9 && < 4.23 , criterion >= 1.1.4 && < 2 , deepseq >= 1.3 && < 2 - , ghc-prim , text-show , text >= 1.1 && < 2.2 From a55bb920b437df64b6752ea581326a9a13e135a3 Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Mon, 29 Sep 2025 08:31:53 -0400 Subject: [PATCH 5/5] Fix SPECIALIZE-related warnings in GHC 9.14 --- src/TextShow/Data/Array.hs | 4 ---- src/TextShow/Data/Floating.hs | 15 ++++++--------- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/TextShow/Data/Array.hs b/src/TextShow/Data/Array.hs index 5dc715a..7009e0c 100644 --- a/src/TextShow/Data/Array.hs +++ b/src/TextShow/Data/Array.hs @@ -34,10 +34,6 @@ import TextShow.Classes (TextShow(..), showbParen, showbSpace) import TextShow.Data.List () import TextShow.Data.Tuple () -{-# SPECIALIZE - showbIArrayPrec :: (IArray UArray e, Ix i, TextShow i, TextShow e) => - Int -> UArray i e -> Builder - #-} -- | Convert an 'IArray' instance to a 'Builder' with the given precedence. -- -- /Since: 2/ diff --git a/src/TextShow/Data/Floating.hs b/src/TextShow/Data/Floating.hs index 6407fa0..18bc8b9 100644 --- a/src/TextShow/Data/Floating.hs +++ b/src/TextShow/Data/Floating.hs @@ -71,15 +71,12 @@ showbRealFloatPrec p x | otherwise = showbGFloat Nothing x {-# INLINE showbRealFloatPrec #-} -{-# SPECIALIZE showbEFloat :: - Maybe Int -> Float -> Builder, - Maybe Int -> Double -> Builder #-} -{-# SPECIALIZE showbFFloat :: - Maybe Int -> Float -> Builder, - Maybe Int -> Double -> Builder #-} -{-# SPECIALIZE showbGFloat :: - Maybe Int -> Float -> Builder, - Maybe Int -> Double -> Builder #-} +{-# SPECIALIZE showbEFloat :: Maybe Int -> Float -> Builder #-} +{-# SPECIALIZE showbEFloat :: Maybe Int -> Double -> Builder #-} +{-# SPECIALIZE showbFFloat :: Maybe Int -> Float -> Builder #-} +{-# SPECIALIZE showbFFloat :: Maybe Int -> Double -> Builder #-} +{-# SPECIALIZE showbGFloat :: Maybe Int -> Float -> Builder #-} +{-# SPECIALIZE showbGFloat :: Maybe Int -> Double -> Builder #-} -- | Show a signed 'RealFloat' value -- using scientific (exponential) notation (e.g. @2.45e2@, @1.5e-3@).