diff --git a/manifest.dhall b/manifest.dhall
index d77a10d7d3a65055bc3170c0e8f8e7e7eaf049da..aec93124ae3607379136943ea93e479fc092507e 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -327,6 +327,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "hashtables" "1.3"
     , callHackage "haskell-src-exts" "1.23.1"
     , callHackage "haskell-src-meta" "0.8.11"
+    , callHackage "heaps" "0.4"
     , callCabal2nix
         "hedgehog-golden"
         "https://github.com/maybe-hedgehog-later/hedgehog-golden"
diff --git a/overlay.nix b/overlay.nix
index 1db113d25777eb5d30891da2ab1cc8039cdd19f5..2e485a493e1c5d54a5b17f7bcf4574f4b5b25995 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -459,6 +459,8 @@ self: with pkgs.haskell.lib; {
 
   haskell-src-meta = self.callPackage (./pkgs/haskell-src-meta.nix) { };
 
+  heaps = self.callPackage (./pkgs/heaps.nix) { };
+
   hedgehog = self.callPackage (./pkgs/hedgehog.nix) { };
 
   hedgehog-golden = self.callPackage (./pkgs/hedgehog-golden.nix) { };
diff --git a/pkgs/heaps.nix b/pkgs/heaps.nix
new file mode 100644
index 0000000000000000000000000000000000000000..487d554b372eb863bbf6b447af7a38de0f1053f6
--- /dev/null
+++ b/pkgs/heaps.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, lib }:
+mkDerivation {
+  pname = "heaps";
+  version = "0.4";
+  sha256 = "89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "http://github.com/ekmett/heaps/";
+  description = "Asymptotically optimal Brodal/Okasaki heaps";
+  license = lib.licenses.bsd3;
+  broken = false;
+}