diff --git a/manifest.dhall b/manifest.dhall
index 50dc3419d34fa1248a03973bc13cceea1fba9801..803a19891628e9ba27b936cda1d4ccd98fc5c5b4 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -627,6 +627,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "sdl2-image" "2.1.0.0"
     , callHackage "sdl2-mixer" "1.2.0.0"
     , callHackage "sdl2-ttf" "2.1.3"
+    , callHackage "selective" "0.5"
     , callHackage "semialign" "1.2.0.1"
     , callHackage "semigroups" "0.20"
     , callHackage "semigroupoids" "5.3.7"
diff --git a/overlay.nix b/overlay.nix
index b0be6671a95542f5269a7a53e440808215584824..95edc40b30241a717fb354af3f0f339c30e9eab3 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -979,6 +979,8 @@ self: with pkgs.haskell.lib; {
 
   sdl2-ttf = self.callPackage (./pkgs/sdl2-ttf.nix) { };
 
+  selective = self.callPackage (./pkgs/selective.nix) { };
+
   semialign = self.callPackage (./pkgs/semialign.nix) { };
 
   semigroupoids = self.callPackage (./pkgs/semigroupoids.nix) { };
diff --git a/pkgs/selective.nix b/pkgs/selective.nix
new file mode 100644
index 0000000000000000000000000000000000000000..81fd8da2ee0e320463cdfa7c689ab868980d2e6d
--- /dev/null
+++ b/pkgs/selective.nix
@@ -0,0 +1,22 @@
+{ mkDerivation, base, containers, lib, QuickCheck, transformers }:
+mkDerivation {
+  pname = "selective";
+  version = "0.5";
+  sha256 = "b0fda80309a83d8f9eed9b8798b3c8c6626600154948323a8d80ab8e2c2f8da3";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base containers transformers ];
+  testHaskellDepends = [ base containers QuickCheck transformers ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/snowleopard/selective";
+  description = "Selective applicative functors";
+  license = lib.licenses.mit;
+  broken = false;
+}