From 6ebaa916ff8266f208bf750595f68eaa2ddf7909 Mon Sep 17 00:00:00 2001 From: Oleg Grenrus Date: Wed, 13 May 2026 21:17:20 +0300 Subject: [PATCH] Fix build against semialign-1.3 --- .github/workflows/haskell-ci.yml | 6 ++++++ ChangeLog.md | 4 ++++ cabal.haskell-ci | 3 +++ src/Data/TreeDiff/OMap.hs | 11 +++++++++-- tree-diff.cabal | 2 +- 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/.github/workflows/haskell-ci.yml b/.github/workflows/haskell-ci.yml index 6749a57..8330f81 100644 --- a/.github/workflows/haskell-ci.yml +++ b/.github/workflows/haskell-ci.yml @@ -267,6 +267,12 @@ jobs: - name: prepare for constraint sets run: | rm -f cabal.project.local + - name: constraint set semialign-1.3 + run: | + $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --constraint='semialign >=1.3 && <1.4' all --dry-run + cabal-plan topo | sort + $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --constraint='semialign >=1.3 && <1.4' --dependencies-only -j2 all + $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --constraint='semialign >=1.3 && <1.4' all - name: constraint set random-hashable run: | if [ $((HCNUMVER >= 90400 && HCNUMVER < 90600)) -ne 0 ] ; then $CABAL v2-build $ARG_COMPILER --enable-tests --disable-benchmarks --constraint='hashable >=1.3.2.0' --constraint='hashable +random-initial-seed' all --dry-run ; fi diff --git a/ChangeLog.md b/ChangeLog.md index 6067903..6c23bd9 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,3 +1,7 @@ +## 0.4.1 + +- Fix build with semialign-1.3 + ## 0.4 - Drop `ansi-wl-pprint` dependency, use `prettyprinter` directly. diff --git a/cabal.haskell-ci b/cabal.haskell-ci index 4f3666d..2d95f1a 100644 --- a/cabal.haskell-ci +++ b/cabal.haskell-ci @@ -13,3 +13,6 @@ constraint-set random-hashable constraints: hashable >=1.3.2.0, hashable +random-initial-seed tests: True run-tests: True + +constraint-set semialign-1.3 + constraints: semialign >=1.3 && <1.4 diff --git a/src/Data/TreeDiff/OMap.hs b/src/Data/TreeDiff/OMap.hs index 3ce21ae..4a8a3e0 100644 --- a/src/Data/TreeDiff/OMap.hs +++ b/src/Data/TreeDiff/OMap.hs @@ -14,10 +14,12 @@ module Data.TreeDiff.OMap ( elems, ) where +import Prelude hiding (zipWith) + import Control.DeepSeq (NFData (..)) import Data.List (sortBy) import Data.Ord (comparing) -import Data.Semialign (Semialign(..), Unzip (..), unzipDefault) +import Data.Semialign (Semialign(..), Unzip (..), Zip (..), unzipDefault) import Data.These (These (..)) import qualified Data.Map.Strict as Map @@ -149,5 +151,10 @@ instance Ord k => Semialign (OMap k) where g (That (Val j y)) = Val j (f (That y)) g (These (Val i x) (Val j y)) = Val (min i j) (f (These x y)) -instance Unzip (OMap k) where +instance Ord k => Zip (OMap k) where + zipWith f (OMap xs) (OMap ys) = OMap (zipWith g xs ys) where + g (Val i x) (Val j y) = Val (min i j) (f x y) + +-- Ord k is required for semialign <1.4 +instance Ord k => Unzip (OMap k) where unzip = unzipDefault diff --git a/tree-diff.cabal b/tree-diff.cabal index 9608c39..7fb4a1f 100644 --- a/tree-diff.cabal +++ b/tree-diff.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: tree-diff -version: 0.4 +version: 0.4.1 synopsis: Diffing of (expression) trees. category: Data, Testing description: