diff --git a/manifest.dhall b/manifest.dhall
index 60349fad55a5a885ddc61f8affbdbaa25facb20b..6ec19792c56c4e4c216833a64d82cccbae550fd6 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -65,6 +65,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
         (None Text)
         (Some "Cabal-tree-diff")
     , callHackage "ChasingBottoms" "1.3.1.12"
+    , callHackage "Diff" "0.4.1"
     , callHackage "HTTP" "4000.4.1"
     , callHackage "HUnit" "1.6.2.0"
     , callHackage "JuicyPixels" "3.3.8"
diff --git a/overlay.nix b/overlay.nix
index 808772f5fc8e76a83e8e1324f947bdcb2b97c9e6..e05c397136c5e3311f3f8751d3c41e3654a252e4 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -13,6 +13,8 @@ self: with pkgs.haskell.lib; {
 
   ChasingBottoms = self.callPackage (./pkgs/ChasingBottoms.nix) { };
 
+  Diff = self.callPackage (./pkgs/Diff.nix) { };
+
   HTTP = self.callPackage (./pkgs/HTTP.nix) { };
 
   HUnit = self.callPackage (./pkgs/HUnit.nix) { };
diff --git a/pkgs/Diff.nix b/pkgs/Diff.nix
new file mode 100644
index 0000000000000000000000000000000000000000..cc437a369b8eaa62ca37f6612b304693bf201999
--- /dev/null
+++ b/pkgs/Diff.nix
@@ -0,0 +1,40 @@
+{ mkDerivation
+, array
+, base
+, directory
+, lib
+, pretty
+, process
+, QuickCheck
+, test-framework
+, test-framework-quickcheck2
+}:
+mkDerivation {
+  pname = "Diff";
+  version = "0.4.1";
+  sha256 = "fd5e4aaac7219bcbb14834fb8580ebe0aae905958d0ad74f5338ea290b372670";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ array base pretty ];
+  testHaskellDepends = [
+    array
+    base
+    directory
+    pretty
+    process
+    QuickCheck
+    test-framework
+    test-framework-quickcheck2
+  ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  description = "O(ND) diff algorithm in haskell";
+  license = lib.licenses.bsd3;
+  broken = false;
+}