diff --git a/manifest.dhall b/manifest.dhall
index 3651d8d4b43409e4f190b123f775f159236fb66e..ff960eb6d29af5b2c77d462985df7b0f4642ceb7 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -399,6 +399,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "sdl2-ttf" "2.1.3"
     , callHackage "semialign" "1.2.0.1"
     , callHackage "semigroups" "0.20"
+    , callHackage "semirings" "0.6"
     , callHackage "serialise" "0.2.6.0"
     , callCabal2nix
         "servant"
diff --git a/overlay.nix b/overlay.nix
index 4682dfaae16f5c846afaf8873288c7515be602fa..976d2325673b201d34f24943bf03b3c732fdc760 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -505,6 +505,8 @@ final: prev: with pkgs.haskell.lib; {
 
   semigroups = prev.callPackage (./pkgs/semigroups.nix) { };
 
+  semirings = prev.callPackage (./pkgs/semirings.nix) { };
+
   serialise = prev.callPackage (./pkgs/serialise.nix) { };
 
   servant = prev.callPackage (./pkgs/servant.nix) { };
diff --git a/pkgs/semirings.nix b/pkgs/semirings.nix
new file mode 100644
index 0000000000000000000000000000000000000000..029b55d2d2cd77f2547f9fe9280dd95ea4abda06
--- /dev/null
+++ b/pkgs/semirings.nix
@@ -0,0 +1,36 @@
+{ mkDerivation
+, base
+, base-compat-batteries
+, containers
+, hashable
+, lib
+, unordered-containers
+}:
+mkDerivation {
+  pname = "semirings";
+  version = "0.6";
+  sha256 = "99356619b137c7c4cf6597909be3c9df118f08a7dff4897549e350b95719059b";
+  revision = "1";
+  editedCabalFile = "1c06yhfa053sv3rfz0d72a33l5qb0xmj1b3hy2z7pzxrcay6g1yc";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base
+    base-compat-batteries
+    containers
+    hashable
+    unordered-containers
+  ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "http://github.com/chessai/semirings";
+  description = "two monoids as one, in holy haskimony";
+  license = lib.licenses.bsd3;
+  broken = false;
+}