From 8b54828c2a4afeb3728f7cbfb21b3a597c93366b Mon Sep 17 00:00:00 2001 From: David Fox Date: Fri, 4 Sep 2026 07:39:32 -0700 Subject: [PATCH 1/3] Diff-2.0.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thanks to Xavier Góngora and Facundo Domínguez who have put some real polish on this package. This version has significant performance optimizations (see PR #25, #30 and #37, leading to a ~2.4x and ~8.5x getDiff improvement on benchmarks) and removes groupBy' from the API (see #26.) --- Diff.cabal | 4 ++-- myers-1986.pdf | Bin 0 -> 83171 bytes 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 myers-1986.pdf diff --git a/Diff.cabal b/Diff.cabal index ed736a1..6985a12 100644 --- a/Diff.cabal +++ b/Diff.cabal @@ -1,13 +1,13 @@ Cabal-Version: 3.14 name: Diff -version: 1.0.2 +version: 2.0.0 synopsis: Diff algorithm in pure Haskell description: Implementation of the standard diff algorithm in Haskell. . Time complexity is O(ND) (input length * number of differences). Space complexity is O(D^2). Includes utilities for pretty printing. category: Algorithms -homepage: https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927 +homepage: https://web.archive.org/web/20150326181224/http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927 license: BSD-3-Clause license-file: LICENSE author: Sterling Clover diff --git a/myers-1986.pdf b/myers-1986.pdf new file mode 100644 index 0000000000000000000000000000000000000000..439cae8ba45ee44c89d6b174b8a4c3ca2359ca03 GIT binary patch literal 83171 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%0A^DX%#?fEw)/C@&H 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 literal 0 HcmV?d00001 From fb76faec6483874a06a0059b5a759ac175dd76b1 Mon Sep 17 00:00:00 2001 From: David Fox Date: Fri, 4 Sep 2026 09:57:46 -0700 Subject: [PATCH 2/3] * Update CHANGELOG.md * Minor version bump to 2.0.1 to allow new hackage upload --- CHANGELOG.md | 7 +++++++ Diff.cabal | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64cddf9..72006fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# 2.0.0 + + - Remove `groupBy'` from `Data.Algorithm.DiffContext` exports (#26). + Use `Data.List.GroupBy.groupBy` from `groupBy` package instead. + - Optimize `Data.Algorithm.Diff` functions (#25, #30, #37). + ~2.4x and ~8.5x `getDiff` improvement on benchmarks. + # 1.0.2 - Output correct format when an input file is empty, e.g. `@@ --0,0 +1,3 @@`. diff --git a/Diff.cabal b/Diff.cabal index 6985a12..03e8198 100644 --- a/Diff.cabal +++ b/Diff.cabal @@ -1,6 +1,6 @@ Cabal-Version: 3.14 name: Diff -version: 2.0.0 +version: 2.0.1 synopsis: Diff algorithm in pure Haskell description: Implementation of the standard diff algorithm in Haskell. . From 86f497df0978222b86e66d9b72d530b327a8797e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20G=C3=B3ngora?= Date: Sun, 6 Sep 2026 10:12:18 -0600 Subject: [PATCH 3/3] Lower cabal-version back to 1.18 Diff.cabal declared cabal-version: 3.14 solely to use the new extra-files field for bundling Diff-liquidhaskell.cabal in the sdist. However, such version is not supported by Hackage and could break dependency solving for some comsumers. Switch to extra-source-files, which achieves the same sdist packaging with no functional difference for this use case, and drop cabal-version back to 1.18. This also requires switching the license field from the SPDX identifier BSD-3-Clause back to the legacy BSD3, since SPDX license expressions aren't recognized before cabal-version: 2.2. --- Diff-liquidhaskell/Diff-liquidhaskell.cabal | 4 ++-- Diff.cabal | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Diff-liquidhaskell/Diff-liquidhaskell.cabal b/Diff-liquidhaskell/Diff-liquidhaskell.cabal index 5a9d3c4..fc46f7e 100644 --- a/Diff-liquidhaskell/Diff-liquidhaskell.cabal +++ b/Diff-liquidhaskell/Diff-liquidhaskell.cabal @@ -1,4 +1,4 @@ -cabal-version: 2.4 +cabal-version: 1.18 name: Diff-liquidhaskell version: 0.1.0.0 synopsis: LiquidHaskell static checks for the Diff package @@ -30,7 +30,7 @@ library -- LH version scheme: 0.. -- Update the corresponding versions in .github/workflows/liquidhaskell.yml -- after upgrading GHC and LH to keep CI in sync. - , liquidhaskell ^>= 0.9.14.1.1 + , liquidhaskell ==0.9.14.1.1 -- Recompilation check is disabled to make sure changes to specification -- annotations are checked by the LH plugin (otherwise they are silently ignored -- if no source change is introduced). diff --git a/Diff.cabal b/Diff.cabal index 03e8198..2caa97c 100644 --- a/Diff.cabal +++ b/Diff.cabal @@ -1,4 +1,4 @@ -Cabal-Version: 3.14 +Cabal-Version: 1.18 name: Diff version: 2.0.1 synopsis: Diff algorithm in pure Haskell @@ -8,13 +8,13 @@ description: Implementation of the standard diff algorithm in Haskell. Space complexity is O(D^2). Includes utilities for pretty printing. category: Algorithms homepage: https://web.archive.org/web/20150326181224/http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927 -license: BSD-3-Clause +license: BSD3 license-file: LICENSE author: Sterling Clover maintainer: David Fox build-Type: Simple extra-doc-files: README.md, CHANGELOG.md -extra-files: ./Diff-liquidhaskell/Diff-liquidhaskell.cabal +extra-source-files: ./Diff-liquidhaskell/Diff-liquidhaskell.cabal bug-reports: https://github.com/seereason/Diff/issues tested-with: