Support GHC 9.8, bump upper bounds, and update CI (#1828)

Make sure Swarm builds with the most recent versions of dependencies. The only one that is still lagging is `filepath`, but `servant` doesn't support `filepath-1.5` so Swarm can't either.

The only real update needed was due to some breaking changes in `aeson-2.2`, but the necessary changes were very minor.  Also fixed a few places where GHC 9.8 is generating additional warnings.

Also update our CI: `haskell-ci` recently dropped support for `hlint`, in favor of projects defining their own standalone `hlint` workflows.
This commit is contained in:
Brent Yorgey 2024-05-10 14:43:41 -05:00 committed by GitHub
parent 46dda6cdeb
commit 096816133f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 107 additions and 82 deletions

View File

@ -17,9 +17,9 @@
#
# For more information, see https://github.com/haskell-CI/haskell-ci
#
# version: 0.17.20240109
# version: 0.19.20240501
#
# REGENDATA ("0.17.20240109",["github","--config=cabal.haskell-ci","--copy-fields=all","swarm.cabal"])
# REGENDATA ("0.19.20240501",["github","--config=cabal.haskell-ci","--copy-fields=all","swarm.cabal"])
#
name: Haskell-CI
on:
@ -52,14 +52,19 @@ jobs:
timeout-minutes:
60
container:
image: buildpack-deps:bionic
image: buildpack-deps:jammy
continue-on-error: ${{ matrix.allow-failure }}
strategy:
matrix:
include:
- compiler: ghc-9.6.4
- compiler: ghc-9.8.2
compilerKind: ghc
compilerVersion: 9.6.4
compilerVersion: 9.8.2
setup-method: ghcup
allow-failure: false
- compiler: ghc-9.6.5
compilerKind: ghc
compilerVersion: 9.6.5
setup-method: ghcup
allow-failure: false
- compiler: ghc-9.4.8
@ -81,6 +86,7 @@ jobs:
mkdir -p "$HOME/.ghcup/bin"
curl -sL https://downloads.haskell.org/ghcup/0.1.20.0/x86_64-linux-ghcup-0.1.20.0 > "$HOME/.ghcup/bin/ghcup"
chmod a+x "$HOME/.ghcup/bin/ghcup"
"$HOME/.ghcup/bin/ghcup" config add-release-channel https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.8.yaml;
"$HOME/.ghcup/bin/ghcup" install ghc "$HCVER" || (cat "$HOME"/.ghcup/logs/*.* && false)
"$HOME/.ghcup/bin/ghcup" install cabal 3.10.2.0 || (cat "$HOME"/.ghcup/logs/*.* && false)
env:
@ -147,11 +153,6 @@ jobs:
- name: update cabal index
run: |
$CABAL v2-update -v
- name: cache (tools)
uses: actions/cache/restore@v3
with:
key: ${{ runner.os }}-${{ matrix.compiler }}-tools-fda4bbd7
path: ~/.haskell-ci-tools
- name: install cabal-plan
run: |
mkdir -p $HOME/.cabal/bin
@ -164,26 +165,14 @@ jobs:
- name: install cabal-docspec
run: |
mkdir -p $HOME/.cabal/bin
curl -sL https://github.com/phadej/cabal-extras/releases/download/cabal-docspec-0.0.0.20231219/cabal-docspec-0.0.0.20231219-x86_64-linux.xz > cabal-docspec.xz
echo '8b60448275466bbe2b9409741b5dd07a41c541283017b95b44efe6e31379d067 cabal-docspec.xz' | sha256sum -c -
curl -sL https://github.com/phadej/cabal-extras/releases/download/cabal-docspec-0.0.0.20240414/cabal-docspec-0.0.0.20240414-x86_64-linux.xz > cabal-docspec.xz
echo '2d18a3f79619e8ec5f11870f926f6dc2616e02a6c889315b7f82044b95a1adb9 cabal-docspec.xz' | sha256sum -c -
xz -d < cabal-docspec.xz > $HOME/.cabal/bin/cabal-docspec
rm -f cabal-docspec.xz
chmod a+x $HOME/.cabal/bin/cabal-docspec
cabal-docspec --version
- name: install hlint
run: |
if [ $((HCNUMVER >= 90400 && HCNUMVER < 90600)) -ne 0 ] ; then HLINTVER=$(cd /tmp && (${CABAL} v2-install -v $ARG_COMPILER --dry-run hlint --constraint='hlint >=3.5 && <3.6' | perl -ne 'if (/\bhlint-(\d+(\.\d+)*)\b/) { print "$1"; last; }')); echo "HLint version $HLINTVER" ; fi
if [ $((HCNUMVER >= 90400 && HCNUMVER < 90600)) -ne 0 ] ; then if [ ! -e $HOME/.haskell-ci-tools/hlint-$HLINTVER/hlint ]; then echo "Downloading HLint version $HLINTVER"; mkdir -p $HOME/.haskell-ci-tools; curl --write-out 'Status Code: %{http_code} Redirects: %{num_redirects} Total time: %{time_total} Total Dsize: %{size_download}\n' --silent --location --output $HOME/.haskell-ci-tools/hlint-$HLINTVER.tar.gz "https://github.com/ndmitchell/hlint/releases/download/v$HLINTVER/hlint-$HLINTVER-x86_64-linux.tar.gz"; tar -xzv -f $HOME/.haskell-ci-tools/hlint-$HLINTVER.tar.gz -C $HOME/.haskell-ci-tools; fi ; fi
if [ $((HCNUMVER >= 90400 && HCNUMVER < 90600)) -ne 0 ] ; then mkdir -p $CABAL_DIR/bin && ln -sf "$HOME/.haskell-ci-tools/hlint-$HLINTVER/hlint" $CABAL_DIR/bin/hlint ; fi
if [ $((HCNUMVER >= 90400 && HCNUMVER < 90600)) -ne 0 ] ; then hlint --version ; fi
- name: save cache (tools)
uses: actions/cache/save@v3
if: always()
with:
key: ${{ runner.os }}-${{ matrix.compiler }}-tools-fda4bbd7
path: ~/.haskell-ci-tools
- name: checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
path: source
- name: initial cabal.project for sdist
@ -220,7 +209,7 @@ jobs:
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dry-run all
cabal-plan
- name: restore cache
uses: actions/cache/restore@v3
uses: actions/cache/restore@v4
with:
key: ${{ runner.os }}-${{ matrix.compiler }}-${{ github.sha }}
path: ~/.cabal/store
@ -239,17 +228,6 @@ jobs:
run: |
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH all
cabal-docspec $ARG_COMPILER
- name: hlint
run: |
if [ $((HCNUMVER >= 90400 && HCNUMVER < 90600)) -ne 0 ] ; then (cd ${PKGDIR_swarm} && hlint -h ${GITHUB_WORKSPACE}/source/.hlint.yaml -XHaskell2010 -XBangPatterns -XDeriveAnyClass -XDeriveDataTypeable -XDeriveFunctor -XDeriveGeneric -XDeriveTraversable -XExplicitForAll -XFlexibleContexts -XFlexibleInstances -XGADTSyntax -XMultiParamTypeClasses -XNumericUnderscores -XRankNTypes -XScopedTypeVariables -XStandaloneDeriving -XTupleSections -XTypeApplications -XTypeOperators -XImportQualifiedPost -XLambdaCase -XStrictData src) ; fi
if [ $((HCNUMVER >= 90400 && HCNUMVER < 90600)) -ne 0 ] ; then (cd ${PKGDIR_swarm} && hlint -h ${GITHUB_WORKSPACE}/source/.hlint.yaml -XHaskell2010 -XBangPatterns -XDeriveAnyClass -XDeriveDataTypeable -XDeriveFunctor -XDeriveGeneric -XDeriveTraversable -XExplicitForAll -XFlexibleContexts -XFlexibleInstances -XGADTSyntax -XMultiParamTypeClasses -XNumericUnderscores -XRankNTypes -XScopedTypeVariables -XStandaloneDeriving -XTupleSections -XTypeApplications -XTypeOperators -XImportQualifiedPost -XLambdaCase -XStrictData src/swarm-util) ; fi
if [ $((HCNUMVER >= 90400 && HCNUMVER < 90600)) -ne 0 ] ; then (cd ${PKGDIR_swarm} && hlint -h ${GITHUB_WORKSPACE}/source/.hlint.yaml -XHaskell2010 -XBangPatterns -XDeriveAnyClass -XDeriveDataTypeable -XDeriveFunctor -XDeriveGeneric -XDeriveTraversable -XExplicitForAll -XFlexibleContexts -XFlexibleInstances -XGADTSyntax -XMultiParamTypeClasses -XNumericUnderscores -XRankNTypes -XScopedTypeVariables -XStandaloneDeriving -XTupleSections -XTypeApplications -XTypeOperators -XImportQualifiedPost -XLambdaCase -XStrictData src/swarm-web) ; fi
if [ $((HCNUMVER >= 90400 && HCNUMVER < 90600)) -ne 0 ] ; then (cd ${PKGDIR_swarm} && hlint -h ${GITHUB_WORKSPACE}/source/.hlint.yaml -XHaskell2010 -XBangPatterns -XDeriveAnyClass -XDeriveDataTypeable -XDeriveFunctor -XDeriveGeneric -XDeriveTraversable -XExplicitForAll -XFlexibleContexts -XFlexibleInstances -XGADTSyntax -XMultiParamTypeClasses -XNumericUnderscores -XRankNTypes -XScopedTypeVariables -XStandaloneDeriving -XTupleSections -XTypeApplications -XTypeOperators -XImportQualifiedPost -XLambdaCase -XStrictData src/swarm-engine) ; fi
if [ $((HCNUMVER >= 90400 && HCNUMVER < 90600)) -ne 0 ] ; then (cd ${PKGDIR_swarm} && hlint -h ${GITHUB_WORKSPACE}/source/.hlint.yaml -XHaskell2010 -XBangPatterns -XDeriveAnyClass -XDeriveDataTypeable -XDeriveFunctor -XDeriveGeneric -XDeriveTraversable -XExplicitForAll -XFlexibleContexts -XFlexibleInstances -XGADTSyntax -XMultiParamTypeClasses -XNumericUnderscores -XRankNTypes -XScopedTypeVariables -XStandaloneDeriving -XTupleSections -XTypeApplications -XTypeOperators -XImportQualifiedPost -XLambdaCase -XStrictData src/swarm-scenario) ; fi
if [ $((HCNUMVER >= 90400 && HCNUMVER < 90600)) -ne 0 ] ; then (cd ${PKGDIR_swarm} && hlint -h ${GITHUB_WORKSPACE}/source/.hlint.yaml -XHaskell2010 -XBangPatterns -XDeriveAnyClass -XDeriveDataTypeable -XDeriveFunctor -XDeriveGeneric -XDeriveTraversable -XExplicitForAll -XFlexibleContexts -XFlexibleInstances -XGADTSyntax -XMultiParamTypeClasses -XNumericUnderscores -XRankNTypes -XScopedTypeVariables -XStandaloneDeriving -XTupleSections -XTypeApplications -XTypeOperators -XImportQualifiedPost -XLambdaCase -XStrictData src/swarm-lang) ; fi
if [ $((HCNUMVER >= 90400 && HCNUMVER < 90600)) -ne 0 ] ; then (cd ${PKGDIR_swarm} && hlint -h ${GITHUB_WORKSPACE}/source/.hlint.yaml -XHaskell2010 -XBangPatterns -XDeriveAnyClass -XDeriveDataTypeable -XDeriveFunctor -XDeriveGeneric -XDeriveTraversable -XExplicitForAll -XFlexibleContexts -XFlexibleInstances -XGADTSyntax -XMultiParamTypeClasses -XNumericUnderscores -XRankNTypes -XScopedTypeVariables -XStandaloneDeriving -XTupleSections -XTypeApplications -XTypeOperators -XImportQualifiedPost -XLambdaCase app/doc) ; fi
if [ $((HCNUMVER >= 90400 && HCNUMVER < 90600)) -ne 0 ] ; then (cd ${PKGDIR_swarm} && hlint -h ${GITHUB_WORKSPACE}/source/.hlint.yaml -XHaskell2010 -XBangPatterns -XDeriveAnyClass -XDeriveDataTypeable -XDeriveFunctor -XDeriveGeneric -XDeriveTraversable -XExplicitForAll -XFlexibleContexts -XFlexibleInstances -XGADTSyntax -XMultiParamTypeClasses -XNumericUnderscores -XRankNTypes -XScopedTypeVariables -XStandaloneDeriving -XTupleSections -XTypeApplications -XTypeOperators -XImportQualifiedPost -XLambdaCase app/scene) ; fi
if [ $((HCNUMVER >= 90400 && HCNUMVER < 90600)) -ne 0 ] ; then (cd ${PKGDIR_swarm} && hlint -h ${GITHUB_WORKSPACE}/source/.hlint.yaml -XHaskell2010 -XImportQualifiedPost app) ; fi
- name: cabal check
run: |
cd ${PKGDIR_swarm} || false
@ -258,7 +236,7 @@ jobs:
run: |
$CABAL v2-haddock --disable-documentation --haddock-all $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all
- name: save cache
uses: actions/cache/save@v3
uses: actions/cache/save@v4
if: always()
with:
key: ${{ runner.os }}-${{ matrix.compiler }}-${{ github.sha }}

31
.github/workflows/hlint.yml vendored Normal file
View File

@ -0,0 +1,31 @@
name: HLint
on:
push:
paths:
- '**.hs'
branches:
- main
pull_request:
paths:
- '**.hs'
branches:
- main
jobs:
hlint:
name: HLint
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: 'Set up HLint'
uses: haskell-actions/hlint-setup@v2
with:
version: '3.8'
- name: 'Run HLint'
uses: haskell-actions/hlint-run@v2
with:
path: '["src/", "app/", "test/"]'
fail-on: suggestion

View File

@ -14,7 +14,14 @@ queue_rules:
- or:
- check-success=Enforce issue references
- -files~=\.hs$
- check-success=Haskell-CI - Linux - ghc-9.6.4
- or:
- check-success=Normalize cabal
- -files~=\.cabal$
- or:
- check-success=HLint
- -files~=\.hs$
- check-success=Haskell-CI - Linux - ghc-9.8.2
- check-success=Haskell-CI - Linux - ghc-9.6.5
- check-success=Haskell-CI - Linux - ghc-9.4.8
- check-success=Haskell-CI - Linux - ghc-9.2.8
@ -43,7 +50,14 @@ pull_request_rules:
- or:
- check-success=Enforce issue references
- -files~=\.hs$
- check-success=Haskell-CI - Linux - ghc-9.6.4
- or:
- check-success=Normalize cabal
- -files~=\.cabal$
- or:
- check-success=HLint
- -files~=\.hs$
- check-success=Haskell-CI - Linux - ghc-9.8.2
- check-success=Haskell-CI - Linux - ghc-9.6.5
- check-success=Haskell-CI - Linux - ghc-9.4.8
- check-success=Haskell-CI - Linux - ghc-9.2.8
- label=merge me

View File

@ -17,11 +17,5 @@ haddock: True
-- Swarm has benchmarks so at least build them :)
benchmarks: True
-- Run HLint
hlint: True
hlint-job: 9.4.8
hlint-yaml: .hlint.yaml
hlint-download-binary: True
raw-project
flags: +ci

View File

@ -122,9 +122,10 @@ formatIncapableFix = \case
-- >>> import Control.Carrier.Throw.Either (runThrow)
-- >>> import Control.Algebra (run)
-- >>> import Swarm.Game.Failure (LoadingFailure)
-- >>> import qualified Data.Set as S
-- >>> :set -XTypeApplications
-- >>> w = mkEntity (defaultEntityDisplay 'l') "magic wand" mempty mempty [CAppear]
-- >>> r = mkEntity (defaultEntityDisplay 'o') "the one ring" mempty mempty [CAppear]
-- >>> w = mkEntity (defaultEntityDisplay 'l') "magic wand" mempty mempty (S.singleton CAppear)
-- >>> r = mkEntity (defaultEntityDisplay 'o') "the one ring" mempty mempty (S.singleton CAppear)
-- >>> m = fromRight mempty . run . runThrow @LoadingFailure $ buildEntityMap [w,r]
-- >>> incapableError cs t = putStr . unpack $ formatIncapable m FixByEquip cs t
--
@ -134,10 +135,10 @@ formatIncapableFix = \case
-- If God in troth thou wantest to play, try thou a Creative game.
--
-- >>> incapableError (R.singletonCap CAppear) (TConst Appear)
-- You do not have the devices required for:
-- You do not have the device required for:
-- 'appear'
-- Please equip:
-- - the one ring or magic wand
-- - magic wand or the one ring
--
-- >>> incapableError (R.singletonCap CRandom) (TConst Random)
-- Missing the random capability for:

View File

@ -137,10 +137,10 @@ instantiateRobot maybeMachine i r =
, _robotLogUpdated = False
}
(.=?) :: (Ae.KeyValue a, Ae.ToJSON v, Eq v) => Ae.Key -> v -> v -> Maybe a
(.=?) :: (Ae.KeyValue e a, Ae.ToJSON v, Eq v) => Ae.Key -> v -> v -> Maybe a
(.=?) n v defaultVal = if defaultVal /= v then Just $ n Ae..= v else Nothing
(.==) :: (Ae.KeyValue a, Ae.ToJSON v) => Ae.Key -> v -> Maybe a
(.==) :: (Ae.KeyValue e a, Ae.ToJSON v) => Ae.Key -> v -> Maybe a
(.==) n v = Just $ n Ae..= v
instance Ae.ToJSON Robot where

View File

@ -24,7 +24,7 @@ import Data.Aeson.Types hiding (Key)
import Data.Char qualified as C (toLower)
import Data.Data (Data)
import Data.Hashable (Hashable)
import Data.List qualified as L (tail)
import Data.List qualified as L (drop)
import Data.Text hiding (filter, length, map)
import GHC.Generics (Generic)
import Swarm.Util qualified as Util
@ -50,7 +50,7 @@ data AbsoluteDir = DEast | DNorth | DWest | DSouth
deriving (Eq, Ord, Show, Read, Generic, Data, Hashable, Enum, Bounded)
directionJsonModifier :: String -> String
directionJsonModifier = map C.toLower . L.tail
directionJsonModifier = map C.toLower . L.drop 1
data CoordinateOrientation
= Latitudinal

View File

@ -1,5 +1,8 @@
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# OPTIONS_GHC -fno-warn-unrecognised-pragmas #-}
{-# HLINT ignore "Functor law" #-}
-- |
-- SPDX-License-Identifier: BSD-3-Clause
@ -207,8 +210,12 @@ getUserId conn userAlias = do
<$> query conn "SELECT id FROM users WHERE alias = ?;" (Only userAlias)
maybe insertNew return maybeId
where
-- Avoid GHC warning re: partiality of head
queryHead = \case
[] -> error "Query result in getUserId should never be empty!"
hd : _ -> hd
insertNew =
fmap (UserId . fromOnly . head)
fmap (UserId . fromOnly . queryHead)
$ query
conn
"INSERT INTO users (alias) VALUES (?) RETURNING id;"

View File

@ -32,7 +32,7 @@ maintainer: byorgey@gmail.com
bug-reports: https://github.com/swarm-game/swarm/issues
copyright: Brent Yorgey 2021
category: Game
tested-with: ghc ==9.2.8 || ==9.4.8 || ==9.6.4
tested-with: ghc ==9.2.8 || ==9.4.8 || ==9.6.5 || ==9.8.2
extra-source-files:
CHANGELOG.md
editors/emacs/*.el
@ -157,7 +157,7 @@ library swarm-lang
fused-effects,
hashable,
lens,
lsp >=2.4 && <2.5,
lsp >=2.4 && <2.7,
megaparsec,
mtl,
parser-combinators,
@ -249,14 +249,14 @@ library swarm-scenario
build-depends:
AhoCorasick >=0.0.4 && <0.0.5,
JuicyPixels >=3.3 && <3.4,
aeson >=2 && <2.2,
aeson >=2.2 && <2.3,
array >=0.5.4 && <0.6,
base >=4.14 && <4.19,
base >=4.14 && <4.20,
boolexpr >=0.2 && <0.3,
bytestring >=0.10 && <0.13,
clock >=0.8.2 && <0.9,
colour >=2.3.6 && <2.4,
containers >=0.6.2 && <0.7,
containers >=0.6.2 && <0.8,
directory >=1.3 && <1.4,
either >=5.0 && <5.1,
extra >=1.7 && <1.8,
@ -264,8 +264,8 @@ library swarm-scenario
fused-effects >=1.1.1.1 && <1.2,
hashable >=1.3.4 && <1.5,
hsnoise >=0.0.3 && <0.1,
lens >=4.19 && <5.3,
linear >=1.21.6 && <1.23,
lens >=4.19 && <5.4,
linear >=1.21.6 && <1.24,
megaparsec >=9.6.1 && <9.7,
murmur3 >=1.0.4 && <1.1,
nonempty-containers >=0.3.4 && <0.3.5,
@ -349,14 +349,14 @@ library swarm-engine
build-depends:
AhoCorasick >=0.0.4 && <0.0.5,
SHA >=1.6.4 && <1.6.5,
aeson >=2 && <2.2,
aeson >=2.2 && <2.3,
array >=0.5.4 && <0.6,
astar >=0.3 && <0.3.1,
base >=4.14 && <4.19,
base >=4.14 && <4.20,
boolexpr >=0.2 && <0.3,
bytestring,
clock >=0.8.2 && <0.9,
containers >=0.6.2 && <0.7,
containers >=0.6.2 && <0.8,
directory >=1.3 && <1.4,
extra >=1.7 && <1.8,
filepath >=1.4 && <1.5,
@ -367,15 +367,15 @@ library swarm-engine
http-client >=0.7 && <0.8,
http-client-tls >=0.3 && <0.4,
http-types >=0.12 && <0.13,
lens >=4.19 && <5.3,
linear >=1.21.6 && <1.23,
lens >=4.19 && <5.4,
linear >=1.21.6 && <1.24,
mtl >=2.2.2 && <2.4,
nonempty-containers >=0.3.4 && <0.3.5,
prettyprinter >=1.7.0 && <1.8,
random >=1.2.0 && <1.3,
servant-docs >=0.12 && <0.14,
text >=1.2.4 && <2.2,
time >=1.9 && <1.14,
time >=1.9 && <1.15,
transformers >=0.5 && <0.7,
transformers >=0.5.6.2 && <0.6.2.0,
unordered-containers >=0.2.14 && <0.3,
@ -421,7 +421,7 @@ library swarm-web
servant-server >=0.19 && <0.21,
text,
wai >=3.2 && <3.3,
wai-app-static >=3.1.8 && <3.1.9,
wai-app-static >=3.1.8 && <3.2,
warp,
witch,
@ -473,7 +473,7 @@ library swarm-tournament
time,
transformers,
wai >=3.2 && <3.3,
wai-app-static >=3.1.8 && <3.1.9,
wai-app-static >=3.1.8 && <3.2,
wai-extra,
warp,
yaml,
@ -508,21 +508,21 @@ library swarm-util
other-modules: Paths_swarm
autogen-modules: Paths_swarm
build-depends:
aeson >=2 && <2.2,
base >=4.14 && <4.19,
aeson >=2.2 && <2.3,
base >=4.14 && <4.20,
boolexpr >=0.2 && <0.3,
clock >=0.8.2 && <0.9,
containers >=0.6.2 && <0.7,
containers >=0.6.2 && <0.8,
directory >=1.3 && <1.4,
either >=5.0 && <5.1,
filepath >=1.4 && <1.5,
fused-effects >=1.1.1.1 && <1.2,
lens >=4.19 && <5.3,
lens >=4.19 && <5.4,
megaparsec >=9.6.1 && <9.7,
minimorph >=0.3 && <0.4,
mtl >=2.2.2 && <2.4,
servant-docs >=0.12 && <0.14,
template-haskell >=2.16 && <2.21,
template-haskell >=2.16 && <2.22,
text >=1.2.4 && <2.2,
transformers >=0.5 && <0.7,
vector >=0.12 && <0.14,
@ -716,22 +716,22 @@ library
other-modules: Paths_swarm
autogen-modules: Paths_swarm
build-depends:
aeson >=2 && <2.2,
aeson >=2.2 && <2.3,
array >=0.5.4 && <0.6,
base >=4.14 && <4.19,
base >=4.14 && <4.20,
brick >=2.1.1 && <2.4,
brick-list-skip >=0.1.1.2 && <0.2,
bytestring >=0.10 && <0.13,
clock >=0.8.2 && <0.9,
colour >=2.3.6 && <2.4,
containers >=0.6.2 && <0.7,
containers >=0.6.2 && <0.8,
extra >=1.7 && <1.8,
filepath >=1.4 && <1.5,
fused-effects >=1.1.1.1 && <1.2,
fuzzy >=0.1 && <0.2,
githash >=0.1.6 && <0.2,
lens >=4.19 && <5.3,
linear >=1.21.6 && <1.23,
lens >=4.19 && <5.4,
linear >=1.21.6 && <1.24,
mtl >=2.2.2 && <2.4,
murmur3 >=1.0.4 && <1.1,
natural-sort >=0.1.2 && <0.2,
@ -742,7 +742,7 @@ library
tagged >=0.8 && <0.9,
text >=1.2.4 && <2.2,
text-zipper >=0.10 && <0.14,
time >=1.9 && <1.14,
time >=1.9 && <1.15,
transformers >=0.5 && <0.7,
transformers >=0.5.6.2 && <0.6.2.0,
vector >=0.12 && <0.14,
@ -890,7 +890,7 @@ test-suite swarm-unit
build-depends:
-- Imports shared with the library don't need bounds
QuickCheck >=2.14 && <2.15,
QuickCheck >=2.14 && <2.16,
aeson,
base,
boolexpr,