diff --git a/manifest.dhall b/manifest.dhall
index 67d47de4022caf38402bd4d9fbab2cfa62555d96..1ed84aa3ae8193ca483da9b6ee11df8c859e4b43 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -225,6 +225,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "data-sketches-core" "0.1.0.0"
     , callHackage "dec" "0.0.5"
     , callHackage "dense-linear-algebra" "0.1.0.0"
+    , callHackage "dependent-map" "0.4.0.0"
     , callHackage "dependent-sum" "0.7.1.0"
     , callHackage "derp" "0.1.6"
     , callHackage "deriving-aeson" "0.2.8"
diff --git a/overlay.nix b/overlay.nix
index 71bd4937c64110a9b43fe97254e4dea53a17fccc..85d92881c609cdc6383632d3477fd7936a9c1ee1 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -303,6 +303,8 @@ self: with pkgs.haskell.lib; {
 
   dense-linear-algebra = self.callPackage (./pkgs/dense-linear-algebra.nix) { };
 
+  dependent-map = self.callPackage (./pkgs/dependent-map.nix) { };
+
   dependent-sum = self.callPackage (./pkgs/dependent-sum.nix) { };
 
   deriving-aeson = self.callPackage (./pkgs/deriving-aeson.nix) { };
diff --git a/pkgs/dependent-map.nix b/pkgs/dependent-map.nix
new file mode 100644
index 0000000000000000000000000000000000000000..e56d5c0f7a35036f6a612280b3b57c02e64e40c3
--- /dev/null
+++ b/pkgs/dependent-map.nix
@@ -0,0 +1,32 @@
+{ mkDerivation
+, base
+, constraints-extras
+, containers
+, dependent-sum
+, lib
+}:
+mkDerivation {
+  pname = "dependent-map";
+  version = "0.4.0.0";
+  sha256 = "53ce0b52d8be1b85fc6489fb27656f16d837bee4fbe0ddf39c844e3ea8871f2c";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base
+    constraints-extras
+    containers
+    dependent-sum
+  ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/obsidiansystems/dependent-map";
+  description = "Dependent finite maps (partial dependent products)";
+  license = "unknown";
+  broken = false;
+}