on master help sign in
Bring back GHC 9.0.1 and 9.2.1-alpha2 to the CI
7295642Andrzej Rybczak
.github/workflows/haskell-ci.yml+54−13
@@ -30,6 +30,16 @@ jobs:
30 strategy:
30 strategy:
31 matrix:
31 matrix:
32 include:
32 include:
33+ - compiler: ghc-9.2.0.20210422
34+ compilerKind: ghc
35+ compilerVersion: 9.2.0.20210422
36+ setup-method: ghcup
37+ allow-failure: true
38+ - compiler: ghc-9.0.1
39+ compilerKind: ghc
40+ compilerVersion: 9.0.1
41+ setup-method: hvr-ppa
42+ allow-failure: false
33 - compiler: ghc-8.10.4
43 - compiler: ghc-8.10.4
34 compilerKind: ghc
44 compilerKind: ghc
35 compilerVersion: 8.10.4
45 compilerVersion: 8.10.4
@@ -51,9 +61,17 @@ jobs:
51 run: |
61 run: |
52 apt-get update
62 apt-get update
53 apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common libtinfo5
63 apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common libtinfo5
64+ if [ "${{ matrix.setup-method }}" = ghcup ]; then
65+ mkdir -p "$HOME/.ghcup/bin"
66+ curl -sL https://downloads.haskell.org/ghcup/0.1.14.1/x86_64-linux-ghcup-0.1.14.1 > "$HOME/.ghcup/bin/ghcup"
67+ chmod a+x "$HOME/.ghcup/bin/ghcup"
68+ "$HOME/.ghcup/bin/ghcup" install ghc "$HCVER"
69+ "$HOME/.ghcup/bin/ghcup" install cabal 3.4.0.0
70+ else
54− apt-add-repository -y 'ppa:hvr/ghc'
71+ apt-add-repository -y 'ppa:hvr/ghc'
55− apt-get update
72+ apt-get update
56− apt-get install -y "$HCNAME" cabal-install-3.4
73+ apt-get install -y "$HCNAME" cabal-install-3.4
74+ fi
57 env:
75 env:
58 HCKIND: ${{ matrix.compilerKind }}
76 HCKIND: ${{ matrix.compilerKind }}
59 HCNAME: ${{ matrix.compiler }}
77 HCNAME: ${{ matrix.compiler }}
@@ -65,16 +83,25 @@ jobs:
65 echo "CABAL_DIR=$HOME/.cabal" >> "$GITHUB_ENV"
83 echo "CABAL_DIR=$HOME/.cabal" >> "$GITHUB_ENV"
66 echo "CABAL_CONFIG=$HOME/.cabal/config" >> "$GITHUB_ENV"
84 echo "CABAL_CONFIG=$HOME/.cabal/config" >> "$GITHUB_ENV"
67 HCDIR=/opt/$HCKIND/$HCVER
85 HCDIR=/opt/$HCKIND/$HCVER
86+ if [ "${{ matrix.setup-method }}" = ghcup ]; then
87+ HC=$HOME/.ghcup/bin/$HCKIND-$HCVER
88+ echo "HC=$HC" >> "$GITHUB_ENV"
89+ echo "HCPKG=$HOME/.ghcup/bin/$HCKIND-pkg-$HCVER" >> "$GITHUB_ENV"
90+ echo "HADDOCK=$HOME/.ghcup/bin/haddock-$HCVER" >> "$GITHUB_ENV"
91+ echo "CABAL=$HOME/.ghcup/bin/cabal-3.4.0.0 -vnormal+nowrap" >> "$GITHUB_ENV"
92+ else
68− HC=$HCDIR/bin/$HCKIND
93+ HC=$HCDIR/bin/$HCKIND
69− echo "HC=$HC" >> "$GITHUB_ENV"
94+ echo "HC=$HC" >> "$GITHUB_ENV"
70− echo "HCPKG=$HCDIR/bin/$HCKIND-pkg" >> "$GITHUB_ENV"
95+ echo "HCPKG=$HCDIR/bin/$HCKIND-pkg" >> "$GITHUB_ENV"
71− echo "HADDOCK=$HCDIR/bin/haddock" >> "$GITHUB_ENV"
96+ echo "HADDOCK=$HCDIR/bin/haddock" >> "$GITHUB_ENV"
72− echo "CABAL=/opt/cabal/3.4/bin/cabal -vnormal+nowrap" >> "$GITHUB_ENV"
97+ echo "CABAL=/opt/cabal/3.4/bin/cabal -vnormal+nowrap" >> "$GITHUB_ENV"
98+ fi
99+
73 HCNUMVER=$(${HC} --numeric-version|perl -ne '/^(\d+)\.(\d+)\.(\d+)(\.(\d+))?$/; print(10000 * $1 + 100 * $2 + ($3 == 0 ? $5 != 1 : $3))')
100 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"
101 echo "HCNUMVER=$HCNUMVER" >> "$GITHUB_ENV"
75 echo "ARG_TESTS=--enable-tests" >> "$GITHUB_ENV"
102 echo "ARG_TESTS=--enable-tests" >> "$GITHUB_ENV"
76 echo "ARG_BENCH=--enable-benchmarks" >> "$GITHUB_ENV"
103 echo "ARG_BENCH=--enable-benchmarks" >> "$GITHUB_ENV"
77− echo "HEADHACKAGE=false" >> "$GITHUB_ENV"
104+ if [ $((HCNUMVER >= 90200)) -ne 0 ] ; then echo "HEADHACKAGE=true" >> "$GITHUB_ENV" ; else echo "HEADHACKAGE=false" >> "$GITHUB_ENV" ; fi
78 echo "ARG_COMPILER=--$HCKIND --with-compiler=$HC" >> "$GITHUB_ENV"
105 echo "ARG_COMPILER=--$HCKIND --with-compiler=$HC" >> "$GITHUB_ENV"
79 echo "GHCJSARITH=0" >> "$GITHUB_ENV"
106 echo "GHCJSARITH=0" >> "$GITHUB_ENV"
80 env:
107 env:
@@ -103,6 +130,17 @@ jobs:
103 repository hackage.haskell.org
130 repository hackage.haskell.org
104 url: http://hackage.haskell.org/
131 url: http://hackage.haskell.org/
105 EOF
132 EOF
133+ if $HEADHACKAGE; then
134+ cat >> $CABAL_CONFIG <<EOF
135+ repository head.hackage.ghc.haskell.org
136+ url: https://ghc.gitlab.haskell.org/head.hackage/
137+ secure: True
138+ root-keys: 7541f32a4ccca4f97aea3b22f5e593ba2c0267546016b992dfadcd2fe944e55d
139+ 26021a13b401500c8eb2761ca95c61f2d625bfef951b939a8124ed12ecf07329
140+ f76d08be13e9a61a377a85e2fb63f4c5435d40f8feb3e12eb05905edb8cdea89
141+ key-threshold: 3
142+ EOF
143+ fi
106 cat $CABAL_CONFIG
144 cat $CABAL_CONFIG
107 - name: versions
145 - name: versions
108 run: |
146 run: |
@@ -128,8 +166,8 @@ jobs:
128 cabal-plan --version
166 cabal-plan --version
129 - name: install doctest
167 - name: install doctest
130 run: |
168 run: |
131− $CABAL --store-dir=$HOME/.haskell-ci-tools/store v2-install $ARG_COMPILER --ignore-project -j2 doctest --constraint='doctest ^>=0.17'
169+ 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.17' ; fi
132− doctest --version
170+ if [ $((HCNUMVER < 90000)) -ne 0 ] ; then doctest --version ; fi
133 - name: checkout
171 - name: checkout
134 uses: actions/checkout@v2
172 uses: actions/checkout@v2
135 with:
173 with:
@@ -159,6 +197,9 @@ jobs:
159 echo " ghc-options: -Werror=missing-methods" >> cabal.project
197 echo " ghc-options: -Werror=missing-methods" >> cabal.project
160 cat >> cabal.project <<EOF
198 cat >> cabal.project <<EOF
161 EOF
199 EOF
200+ if $HEADHACKAGE; then
201+ echo "allow-newer: $($HCPKG list --simple-output | sed -E 's/([a-zA-Z-]+)-[0-9.]+/*:\1,/g')" >> cabal.project
202+ fi
162 $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: $_ installed\n" unless /^(effectful)$/; }' >> cabal.project.local
203 $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: $_ installed\n" unless /^(effectful)$/; }' >> cabal.project.local
163 cat cabal.project
204 cat cabal.project
164 cat cabal.project.local
205 cat cabal.project.local
@@ -187,8 +228,8 @@ jobs:
187 $CABAL v2-test $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --test-show-details=direct
228 $CABAL v2-test $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --test-show-details=direct
188 - name: doctest
229 - name: doctest
189 run: |
230 run: |
190− cd ${PKGDIR_effectful} || false
231+ if [ $((HCNUMVER < 90000)) -ne 0 ] ; then cd ${PKGDIR_effectful} || false ; fi
191− doctest -XBangPatterns -XConstraintKinds -XDataKinds -XFlexibleContexts -XFlexibleInstances -XGADTs -XLambdaCase -XMultiParamTypeClasses -XRankNTypes -XRecordWildCards -XRoleAnnotations -XScopedTypeVariables -XStrictData -XTupleSections -XTypeApplications -XTypeFamilies -XTypeOperators src
232+ if [ $((HCNUMVER < 90000)) -ne 0 ] ; then doctest -XBangPatterns -XConstraintKinds -XDataKinds -XFlexibleContexts -XFlexibleInstances -XGADTs -XLambdaCase -XMultiParamTypeClasses -XRankNTypes -XRecordWildCards -XRoleAnnotations -XScopedTypeVariables -XStrictData -XTupleSections -XTypeApplications -XTypeFamilies -XTypeOperators src ; fi
192 - name: cabal check
233 - name: cabal check
193 run: |
234 run: |
194 cd ${PKGDIR_effectful} || false
235 cd ${PKGDIR_effectful} || false
effectful.cabal+1−1
@@ -15,7 +15,7 @@ description: A simple, performant extensible effects library with seamless
15extra-source-files: CHANGELOG.md
15extra-source-files: CHANGELOG.md
16 README.md
16 README.md
17
17
18−tested-with: GHC ==8.6.5 || ==8.8.4 || ==8.10.4
18+tested-with: GHC ==8.6.5 || ==8.8.4 || ==8.10.4 || ==9.0.1 || ==9.2.0.20210422
19
19
20bug-reports: https://github.com/arybczak/effectful/issues
20bug-reports: https://github.com/arybczak/effectful/issues
21source-repository head
21source-repository head
src/Effectful/Writer.hs+6
@@ -1,3 +1,4 @@
1+{-# LANGUAGE CPP #-}
1-- | The 'Writer' as an effect.
2-- | The 'Writer' as an effect.
2module Effectful.Writer
3module Effectful.Writer
3 ( Writer
4 ( Writer
@@ -40,12 +41,17 @@ listen
40 => Eff es a
41 => Eff es a
41 -> Eff es (a, w)
42 -> Eff es (a, w)
42listen (Eff m) = unsafeEff $ \es -> mask $ \restore -> do
43listen (Eff m) = unsafeEff $ \es -> mask $ \restore -> do
44+#if __GLASGOW_HASKELL__ >= 900
45+ error "'listen' temporarily doesn't compile with released GHC 9.* versions \
46+ \due to a GHC bug. If you want to use 'listen', please use GHC 8.*"
47+#else
43 w0 <- unsafeStateEnv (\(IdE (Writer w)) -> (w, IdE (Writer mempty))) es
48 w0 <- unsafeStateEnv (\(IdE (Writer w)) -> (w, IdE (Writer mempty))) es
44 -- If an exception is thrown, restore e0 and keep parts of e1.
49 -- If an exception is thrown, restore e0 and keep parts of e1.
45 a <- restore (m es) `onException`
50 a <- restore (m es) `onException`
46 unsafeModifyEnv (\(IdE (Writer w)) -> IdE (Writer (w0 `mappend` w))) es
51 unsafeModifyEnv (\(IdE (Writer w)) -> IdE (Writer (w0 `mappend` w))) es
47 w1 <- unsafeStateEnv (\(IdE (Writer w)) -> (w, IdE (Writer (w0 `mappend` w)))) es
52 w1 <- unsafeStateEnv (\(IdE (Writer w)) -> (w, IdE (Writer (w0 `mappend` w)))) es
48 pure (a, w1)
53 pure (a, w1)
54+#endif
49
55
50listens
56listens
51 :: (Writer w :> es, Monoid w)
57 :: (Writer w :> es, Monoid w)