diff --git a/manifest.dhall b/manifest.dhall
index b9ac8b0ea678bcfc321e3bcc48dc4ab34cad7949..63f415a4d7c830acb32d8fb7653a38690187ccdd 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -500,6 +500,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "monad-peel" "0.2.1.2"
     , callHackage "mono-traversable" "1.0.15.3"
     , callHackage "monoid-subclasses" "1.1.3"
+    , callHackage "mtl-compat" "0.2.2"
     , callHackage "mwc-random" "0.15.0.2"
     , callHackage "nanospec" "0.2.2"
     , callHackage "natural-transformation" "0.4"
diff --git a/overlay.nix b/overlay.nix
index 3ce8a04ed815f771d9debd5cf99300d33755c361..d309f85faec9163d6dd282c705b81c48adc689bb 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -747,6 +747,8 @@ self: with pkgs.haskell.lib; {
 
   monoid-subclasses = self.callPackage (./pkgs/monoid-subclasses.nix) { };
 
+  mtl-compat = self.callPackage (./pkgs/mtl-compat.nix) { };
+
   mwc-random = self.callPackage (./pkgs/mwc-random.nix) { };
 
   nanospec = self.callPackage (./pkgs/nanospec.nix) { };
diff --git a/pkgs/mtl-compat.nix b/pkgs/mtl-compat.nix
new file mode 100644
index 0000000000000000000000000000000000000000..ab21668f343f4e3692fca46145f2697b15f4942f
--- /dev/null
+++ b/pkgs/mtl-compat.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, lib, mtl }:
+mkDerivation {
+  pname = "mtl-compat";
+  version = "0.2.2";
+  sha256 = "1955398fe2115674f47f553b2caaf928c6aa3424271a5cd13bc191e54bfe3a9e";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base mtl ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/haskell-compat/mtl-compat";
+  description = "Backported Control.Monad.Except module from mtl";
+  license = lib.licenses.bsd3;
+  broken = false;
+}