diff --git a/manifest.dhall b/manifest.dhall
index c3a2f6baeb25dea09d33fdd1c6af4f6af6c24dc8..278e93f7b9e7c95522388bdfed22ef9ade60d64c 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -180,6 +180,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
         "https://gitlab.homotopic.tech/horizon/adopted/ed25519"
         (None Text)
         (None Text)
+    , callHackage "either" "5.0.2"
     , callHackage "email-validate" "2.3.2.16"
     , callCabal2nix
         "effectful-cache"
diff --git a/overlay.nix b/overlay.nix
index e1785ff56c7d7cb953c9218ff9666b02f795133a..37d511d1ae980eb144ca36d9a06393dcf8c1cff8 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -179,6 +179,8 @@ final: prev: with pkgs.haskell.lib; {
 
   effectful-th = prev.callPackage (./pkgs/effectful-th.nix) { };
 
+  either = prev.callPackage (./pkgs/either.nix) { };
+
   email-validate = prev.callPackage (./pkgs/email-validate.nix) { };
 
   extra = prev.callPackage (./pkgs/extra.nix) { };
diff --git a/pkgs/either.nix b/pkgs/either.nix
new file mode 100644
index 0000000000000000000000000000000000000000..52ab1cbc0e179baffad9de7dc692dd39b7703858
--- /dev/null
+++ b/pkgs/either.nix
@@ -0,0 +1,43 @@
+{ mkDerivation
+, base
+, bifunctors
+, lib
+, mtl
+, profunctors
+, QuickCheck
+, semigroupoids
+, test-framework
+, test-framework-quickcheck2
+}:
+mkDerivation {
+  pname = "either";
+  version = "5.0.2";
+  sha256 = "bfa45b967fd77b1c7c952e156377441e3c42b6dc873ab1f06a7421a3222287be";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base
+    bifunctors
+    mtl
+    profunctors
+    semigroupoids
+  ];
+  testHaskellDepends = [
+    base
+    QuickCheck
+    test-framework
+    test-framework-quickcheck2
+  ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "http://github.com/ekmett/either/";
+  description = "Combinators for working with sums";
+  license = lib.licenses.bsd3;
+  broken = false;
+}