diff --git a/manifest.dhall b/manifest.dhall
index 892e64bd07e9e64fddcdce66afbc3a917a696a3b..a41727859d17dd80d990a46f1a7e02e42436915b 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -152,6 +152,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "config-ini" "0.2.5.0"
     , callHackage "connection" "0.3.1"
     , callHackage "constraints" "0.13.4"
+    , callHackage "contravariant" "1.5.5"
     , callHackage "criterion-measurement" "0.2.0.0"
     , callHackage "criterion" "1.5.13.0"
     , callHackage "cursor" "0.3.2.0"
diff --git a/overlay.nix b/overlay.nix
index 900505114c660d63bce50ee72da713188074353b..cec51f20832a9a550b788c9aa3fcc3afe18e0c8a 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -171,6 +171,8 @@ self: with pkgs.haskell.lib; {
 
   constraints = self.callPackage (./pkgs/constraints.nix) { };
 
+  contravariant = self.callPackage (./pkgs/contravariant.nix) { };
+
   criterion = self.callPackage (./pkgs/criterion.nix) { };
 
   criterion-measurement = self.callPackage (./pkgs/criterion-measurement.nix) { };
diff --git a/pkgs/contravariant.nix b/pkgs/contravariant.nix
new file mode 100644
index 0000000000000000000000000000000000000000..42c5dca42919a378988126f4913de2b94f4322f5
--- /dev/null
+++ b/pkgs/contravariant.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, lib, StateVar, transformers }:
+mkDerivation {
+  pname = "contravariant";
+  version = "1.5.5";
+  sha256 = "062fd66580d7aad0b5ba93e644ffa7feee69276ef50f20d4ed9f1deb7642dffa";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base StateVar transformers ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "http://github.com/ekmett/contravariant/";
+  description = "Contravariant functors";
+  license = lib.licenses.bsd3;
+  broken = false;
+}