summary refs log tree commit diff
diff options
context:
space:
mode:
authorEllie Hermaszewska <git@monoid.al>2021-10-26 18:20:34 +0800
committerEllie Hermaszewska <git@monoid.al>2021-11-07 20:18:45 +0800
commit15ae25f36ce057c1750f02e30bcd7b6dc38d523b (patch)
treeb185f546a252ee953c0902803bb9fd8a692b33c7
parent518f09f2d0e8829c3ef77c0f535df309f49ed6d9 (diff)
downloadnixpkgs-15ae25f36ce057c1750f02e30bcd7b6dc38d523b.tar
nixpkgs-15ae25f36ce057c1750f02e30bcd7b6dc38d523b.tar.gz
nixpkgs-15ae25f36ce057c1750f02e30bcd7b6dc38d523b.tar.bz2
nixpkgs-15ae25f36ce057c1750f02e30bcd7b6dc38d523b.tar.lz
nixpkgs-15ae25f36ce057c1750f02e30bcd7b6dc38d523b.tar.xz
nixpkgs-15ae25f36ce057c1750f02e30bcd7b6dc38d523b.tar.zst
nixpkgs-15ae25f36ce057c1750f02e30bcd7b6dc38d523b.zip
haskell: switch from haskell.lib to haskell.lib.compose
-rw-r--r--pkgs/applications/misc/gitit/default.nix8
-rw-r--r--pkgs/applications/virtualization/arion/default.nix4
-rw-r--r--pkgs/development/compilers/elm/default.nix18
-rw-r--r--pkgs/development/compilers/pakcs/default.nix8
-rw-r--r--pkgs/development/haskell-modules/configuration-common.nix368
-rw-r--r--pkgs/development/haskell-modules/configuration-darwin.nix98
-rw-r--r--pkgs/development/haskell-modules/configuration-ghc-8.10.x.nix10
-rw-r--r--pkgs/development/haskell-modules/configuration-ghc-8.6.x.nix4
-rw-r--r--pkgs/development/haskell-modules/configuration-ghc-8.8.x.nix8
-rw-r--r--pkgs/development/haskell-modules/configuration-ghc-9.0.x.nix52
-rw-r--r--pkgs/development/haskell-modules/configuration-ghc-9.2.x.nix72
-rw-r--r--pkgs/development/haskell-modules/configuration-ghc-head.nix2
-rw-r--r--pkgs/development/haskell-modules/configuration-ghcjs.nix23
-rw-r--r--pkgs/development/haskell-modules/configuration-nix.nix373
-rw-r--r--pkgs/development/haskell-modules/configuration-tensorflow.nix2
-rw-r--r--pkgs/development/haskell-modules/lib/compose.nix6
-rw-r--r--pkgs/development/haskell-modules/make-package-set.nix16
-rw-r--r--pkgs/development/interpreters/dhall/build-dhall-package.nix2
-rw-r--r--pkgs/development/tools/continuous-integration/hci/default.nix6
-rw-r--r--pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix6
-rw-r--r--pkgs/development/tools/haskell/dconf2nix/default.nix6
-rw-r--r--pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix6
-rw-r--r--pkgs/development/tools/haskell/lambdabot/default.nix4
-rw-r--r--pkgs/development/tools/pandoc/default.nix6
-rw-r--r--pkgs/development/tools/pretty-simple/default.nix4
-rw-r--r--pkgs/development/tools/purescript/spago/default.nix6
-rw-r--r--pkgs/development/tools/shellcheck/default.nix2
-rw-r--r--pkgs/test/haskell/documentationTarball/default.nix4
-rw-r--r--pkgs/test/haskell/setBuildTarget/default.nix4
-rw-r--r--pkgs/tools/graphics/ldgallery/default.nix6
-rw-r--r--pkgs/top-level/all-packages.nix124
-rw-r--r--pkgs/top-level/haskell-packages.nix6
32 files changed, 635 insertions, 629 deletions
diff --git a/pkgs/applications/misc/gitit/default.nix b/pkgs/applications/misc/gitit/default.nix
index a4ffd3bf88d..365b3f6acd9 100644
--- a/pkgs/applications/misc/gitit/default.nix
+++ b/pkgs/applications/misc/gitit/default.nix
@@ -14,13 +14,13 @@ let
   plugins =
     if pluginSupport
     then plain
-    else haskell.lib.disableCabalFlag plain "plugins";
-  static = haskell.lib.justStaticExecutables plugins;
+    else haskell.lib.compose.disableCabalFlag "plugins" plain;
+  static = haskell.lib.compose.justStaticExecutables plugins;
 
 in
-  (haskell.lib.overrideCabal static (drv: {
+  (haskell.lib.compose.overrideCabal (drv: {
     buildTools = (drv.buildTools or []) ++ [ removeReferencesTo ];
-  })).overrideAttrs (drv: {
+  }) static).overrideAttrs (drv: {
 
     # These libraries are still referenced, because they generate
     # a `Paths_*` module for figuring out their version.
diff --git a/pkgs/applications/virtualization/arion/default.nix b/pkgs/applications/virtualization/arion/default.nix
index f144ec97677..33b2b000cbf 100644
--- a/pkgs/applications/virtualization/arion/default.nix
+++ b/pkgs/applications/virtualization/arion/default.nix
@@ -18,11 +18,11 @@ let
   arion =
     justStaticExecutables (
       overrideCabal
-        arion-compose
         cabalOverrides
+        arion-compose
       );
 
-  inherit (haskell.lib) justStaticExecutables overrideCabal;
+  inherit (haskell.lib.compose) justStaticExecutables overrideCabal;
 
   inherit (haskellPackages) arion-compose;
 
diff --git a/pkgs/development/compilers/elm/default.nix b/pkgs/development/compilers/elm/default.nix
index 837855d2bdd..b82f14d9ef9 100644
--- a/pkgs/development/compilers/elm/default.nix
+++ b/pkgs/development/compilers/elm/default.nix
@@ -8,9 +8,9 @@ let
   fetchElmDeps = import ./fetchElmDeps.nix { inherit stdenv lib fetchurl; };
 
   hsPkgs = haskellPackages.override {
-    overrides = self: super: with haskell.lib; with lib;
+    overrides = self: super: with haskell.lib.compose; with lib;
       let elmPkgs = rec {
-            elm = overrideCabal (self.callPackage ./packages/elm.nix { }) (drv: {
+            elm = overrideCabal (drv: {
               # sadly with parallelism most of the time breaks compilation
               enableParallelBuilding = false;
               preConfigure = self.fetchElmDeps {
@@ -29,22 +29,22 @@ let
               homepage = "https://elm-lang.org/";
               license = licenses.bsd3;
               maintainers = with maintainers; [ domenkozar turbomack ];
-            });
+            }) (self.callPackage ./packages/elm.nix { });
 
             /*
             The elm-format expression is updated via a script in the https://github.com/avh4/elm-format repo:
             `package/nix/build.sh`
             */
-            elm-format = justStaticExecutables (overrideCabal (self.callPackage ./packages/elm-format.nix {}) (drv: {
+            elm-format = justStaticExecutables (overrideCabal (drv: {
               jailbreak = true;
 
               description = "Formats Elm source code according to a standard set of rules based on the official Elm Style Guide";
               homepage = "https://github.com/avh4/elm-format";
               license = licenses.bsd3;
               maintainers = with maintainers; [ avh4 turbomack ];
-            }));
+            }) (self.callPackage ./packages/elm-format.nix {}));
 
-            elmi-to-json = justStaticExecutables (overrideCabal (self.callPackage ./packages/elmi-to-json.nix {}) (drv: {
+            elmi-to-json = justStaticExecutables (overrideCabal (drv: {
               prePatch = ''
                 substituteInPlace package.yaml --replace "- -Werror" ""
                 hpack
@@ -55,9 +55,9 @@ let
               homepage = "https://github.com/stoeffel/elmi-to-json";
               license = licenses.bsd3;
               maintainers = [ maintainers.turbomack ];
-            }));
+            }) (self.callPackage ./packages/elmi-to-json.nix {}));
 
-            elm-instrument = justStaticExecutables (overrideCabal (self.callPackage ./packages/elm-instrument.nix {}) (drv: {
+            elm-instrument = justStaticExecutables (overrideCabal (drv: {
               prePatch = ''
                 sed "s/desc <-.*/let desc = \"${drv.version}\"/g" Setup.hs --in-place
               '';
@@ -69,7 +69,7 @@ let
               homepage = "https://github.com/zwilias/elm-instrument";
               license = licenses.bsd3;
               maintainers = [ maintainers.turbomack ];
-            }));
+            }) (self.callPackage ./packages/elm-instrument.nix {}));
 
             inherit fetchElmDeps;
             elmVersion = elmPkgs.elm.version;
diff --git a/pkgs/development/compilers/pakcs/default.nix b/pkgs/development/compilers/pakcs/default.nix
index e2dceaab397..a08a1b245db 100644
--- a/pkgs/development/compilers/pakcs/default.nix
+++ b/pkgs/development/compilers/pakcs/default.nix
@@ -16,14 +16,14 @@ let
 
   curry-frontend = (haskellPackages.override {
     overrides = self: super: {
-      curry-base = haskell.lib.overrideCabal (super.callPackage ./curry-base.nix {}) (drv: {
+      curry-base = haskell.lib.compose.overrideCabal (drv: {
         inherit src;
         postUnpack = "sourceRoot+=/frontend/curry-base";
-      });
-      curry-frontend = haskell.lib.overrideCabal (super.callPackage ./curry-frontend.nix {}) (drv: {
+      }) (super.callPackage ./curry-base.nix {});
+      curry-frontend = haskell.lib.compose.overrideCabal (drv: {
         inherit src;
         postUnpack = "sourceRoot+=/frontend/curry-frontend";
-      });
+      }) (super.callPackage ./curry-frontend.nix {});
     };
   }).curry-frontend;
 in stdenv.mkDerivation {
diff --git a/pkgs/development/haskell-modules/configuration-common.nix b/pkgs/development/haskell-modules/configuration-common.nix
index 7bf11fa2a45..6ce3c9cdb59 100644
--- a/pkgs/development/haskell-modules/configuration-common.nix
+++ b/pkgs/development/haskell-modules/configuration-common.nix
@@ -27,10 +27,10 @@ self: super: {
   bin-package-db = null;
 
   # waiting for release: https://github.com/jwiegley/c2hsc/issues/41
-  c2hsc = appendPatch super.c2hsc (pkgs.fetchpatch {
+  c2hsc = appendPatch (pkgs.fetchpatch {
     url = "https://github.com/jwiegley/c2hsc/commit/490ecab202e0de7fc995eedf744ad3cb408b53cc.patch";
     sha256 = "1c7knpvxr7p8c159jkyk6w29653z5yzgjjqj11130bbb8mk9qhq7";
-  });
+  }) super.c2hsc;
 
   # Some Hackage packages reference this attribute, which exists only in the
   # GHCJS package set. We provide a dummy version here to fix potential
@@ -60,7 +60,7 @@ self: super: {
 
   # The Hackage tarball is purposefully broken, because it's not intended to be, like, useful.
   # https://git-annex.branchable.com/bugs/bash_completion_file_is_missing_in_the_6.20160527_tarball_on_hackage/
-  git-annex = (overrideSrc super.git-annex {
+  git-annex = (overrideSrc {
     src = pkgs.fetchgit {
       name = "git-annex-${super.git-annex.version}-src";
       url = "git://git-annex.branchable.com/";
@@ -74,16 +74,16 @@ self: super: {
         rm -r $out/doc/?ndroid*
       '';
     };
-  }).override {
+  } super.git-annex).override {
     dbus = if pkgs.stdenv.isLinux then self.dbus else null;
     fdo-notify = if pkgs.stdenv.isLinux then self.fdo-notify else null;
     hinotify = if pkgs.stdenv.isLinux then self.hinotify else self.fsnotify;
   };
 
   # Fix test trying to access /home directory
-  shell-conduit = overrideCabal super.shell-conduit (drv: {
+  shell-conduit = overrideCabal (drv: {
     postPatch = "sed -i s/home/tmp/ test/Spec.hs";
-  });
+  }) super.shell-conduit;
 
   # https://github.com/froozen/kademlia/issues/2
   kademlia = dontCheck super.kademlia;
@@ -99,14 +99,14 @@ self: super: {
   # Tests require a Kafka broker running locally
   haskakafka = dontCheck super.haskakafka;
 
-  bindings-levmar = overrideCabal super.bindings-levmar (drv: {
+  bindings-levmar = overrideCabal (drv: {
     extraLibraries = [ pkgs.blas ];
-  });
+  }) super.bindings-levmar;
 
   # Requires wrapQtAppsHook
-  qtah-cpp-qt5 = overrideCabal super.qtah-cpp-qt5 (drv: {
+  qtah-cpp-qt5 = overrideCabal (drv: {
     buildDepends = [ pkgs.qt5.wrapQtAppsHook ];
-  });
+  }) super.qtah-cpp-qt5;
 
   # The Haddock phase fails for one reason or another.
   deepseq-magic = dontHaddock super.deepseq-magic;
@@ -119,15 +119,15 @@ self: super: {
 
   # sse2 flag due to https://github.com/haskell/vector/issues/47.
   # Jailbreak is necessary for QuickCheck dependency.
-  vector = doJailbreak (if pkgs.stdenv.isi686 then appendConfigureFlag super.vector "--ghc-options=-msse2" else super.vector);
+  vector = doJailbreak (if pkgs.stdenv.isi686 then appendConfigureFlag "--ghc-options=-msse2" super.vector else super.vector);
 
-  inline-c-cpp = overrideCabal super.inline-c-cpp (drv: {
+  inline-c-cpp = overrideCabal (drv: {
     postPatch = (drv.postPatch or "") + ''
       substituteInPlace inline-c-cpp.cabal --replace "-optc-std=c++11" ""
     '';
-  });
+  }) super.inline-c-cpp;
 
-  inline-java = addBuildDepend super.inline-java pkgs.jdk;
+  inline-java = addBuildDepend pkgs.jdk super.inline-java;
 
   # Upstream notified by e-mail.
   permutation = dontCheck super.permutation;
@@ -171,13 +171,13 @@ self: super: {
   digit = doJailbreak super.digit;
 
   hnix = generateOptparseApplicativeCompletion "hnix"
-    (overrideCabal (super.hnix.override {
+    (overrideCabal (drv: {
+      # 2020-06-05: HACK: does not pass own build suite - `dontCheck`
+      doCheck = false;
+    }) (super.hnix.override {
       # needs newer version of relude and semialign than stackage has
       relude = self.relude_1_0_0_1;
       semialign = self.semialign_1_2_0_1;
-    }) (drv: {
-      # 2020-06-05: HACK: does not pass own build suite - `dontCheck`
-      doCheck = false;
     }));
 
   # Fails for non-obvious reasons while attempting to use doctest.
@@ -185,8 +185,8 @@ self: super: {
   search = dontCheck super.search;
 
   # see https://github.com/LumiGuide/haskell-opencv/commit/cd613e200aa20887ded83256cf67d6903c207a60
-  opencv = dontCheck (appendPatch super.opencv ./patches/opencv-fix-116.patch);
-  opencv-extra = dontCheck (appendPatch super.opencv-extra ./patches/opencv-fix-116.patch);
+  opencv = dontCheck (appendPatch ./patches/opencv-fix-116.patch super.opencv);
+  opencv-extra = dontCheck (appendPatch ./patches/opencv-fix-116.patch super.opencv-extra);
 
   # https://github.com/ekmett/structures/issues/3
   structures = dontCheck super.structures;
@@ -257,17 +257,17 @@ self: super: {
   hgdbmi = dontCheck super.hgdbmi;
   hi = dontCheck super.hi;
   hierarchical-clustering = dontCheck super.hierarchical-clustering;
-  hlibgit2 = disableHardening super.hlibgit2 [ "format" ];
+  hlibgit2 = disableHardening [ "format" ] super.hlibgit2;
   hmatrix-tests = dontCheck super.hmatrix-tests;
   hquery = dontCheck super.hquery;
   hs2048 = dontCheck super.hs2048;
   hsbencher = dontCheck super.hsbencher;
   hsexif = dontCheck super.hsexif;
   hspec-server = dontCheck super.hspec-server;
-  HTF = overrideCabal super.HTF (orig: {
+  HTF = overrideCabal (orig: {
     # The scripts in scripts/ are needed to build the test suite.
     preBuild = "patchShebangs --build scripts";
-  });
+  }) super.HTF;
   htsn = dontCheck super.htsn;
   htsn-import = dontCheck super.htsn-import;
   http-link-header = dontCheck super.http-link-header; # non deterministic failure https://hydra.nixos.org/build/75041105
@@ -278,7 +278,7 @@ self: super: {
   language-slice = dontCheck super.language-slice;
   ldap-client = dontCheck super.ldap-client;
   lensref = dontCheck super.lensref;
-  lvmrun = disableHardening (dontCheck super.lvmrun) ["format"];
+  lvmrun = disableHardening ["format"] (dontCheck super.lvmrun);
   matplotlib = dontCheck super.matplotlib;
   # https://github.com/matterhorn-chat/matterhorn/issues/679 they do not want to be on stackage
   matterhorn = doJailbreak (super.matterhorn.overrideScope (self: super: {
@@ -371,7 +371,7 @@ self: super: {
   duplo = dontCheck super.duplo;
 
   # https://github.com/evanrinehart/mikmod/issues/1
-  mikmod = addExtraLibrary super.mikmod pkgs.libmikmod;
+  mikmod = addExtraLibrary pkgs.libmikmod super.mikmod;
 
   # https://github.com/basvandijk/threads/issues/10
   threads = dontCheck super.threads;
@@ -387,7 +387,7 @@ self: super: {
   CHXHtml = dontDistribute super.CHXHtml;
 
   # https://github.com/NixOS/nixpkgs/issues/6350
-  paypal-adaptive-hoops = overrideCabal super.paypal-adaptive-hoops (drv: { testTarget = "local"; });
+  paypal-adaptive-hoops = overrideCabal (drv: { testTarget = "local"; }) super.paypal-adaptive-hoops;
 
   # Avoid "QuickCheck >=2.3 && <2.10" dependency we cannot fulfill in lts-11.x.
   test-framework = dontCheck super.test-framework;
@@ -447,11 +447,11 @@ self: super: {
   doctest-discover = dontCheck super.doctest-discover;
 
   # Depends on itself for testing
-  tasty-discover = overrideCabal super.tasty-discover (drv: {
+  tasty-discover = overrideCabal (drv: {
     preBuild = ''
       export PATH="$PWD/dist/build/tasty-discover:$PATH"
     '' + (drv.preBuild or "");
-  });
+  }) super.tasty-discover;
 
   # Known issue with nondeterministic test suite failure
   # https://github.com/nomeata/tasty-expected-failure/issues/21
@@ -485,7 +485,7 @@ self: super: {
   fft = dontCheck super.fft;
 
   # This package can't be built on non-Windows systems.
-  Win32 = overrideCabal super.Win32 (drv: { broken = !pkgs.stdenv.isCygwin; });
+  Win32 = overrideCabal (drv: { broken = !pkgs.stdenv.isCygwin; }) super.Win32;
   inline-c-win32 = dontDistribute super.inline-c-win32;
   Southpaw = dontDistribute super.Southpaw;
 
@@ -493,7 +493,7 @@ self: super: {
   lhs2tex = dontDistribute super.lhs2tex;
 
   # https://ghc.haskell.org/trac/ghc/ticket/9825
-  vimus = overrideCabal super.vimus (drv: { broken = pkgs.stdenv.isLinux && pkgs.stdenv.isi686; });
+  vimus = overrideCabal (drv: { broken = pkgs.stdenv.isLinux && pkgs.stdenv.isi686; }) super.vimus;
 
   # https://github.com/kazu-yamamoto/logger/issues/42
   logger = dontCheck super.logger;
@@ -520,16 +520,16 @@ self: super: {
   Euterpea = doJailbreak super.Euterpea;
 
   # Install icons, metadata and cli program.
-  bustle = overrideCabal super.bustle (drv: {
+  bustle = overrideCabal (drv: {
     buildDepends = [ pkgs.libpcap ];
     buildTools = with pkgs.buildPackages; [ gettext perl help2man ];
     postInstall = ''
       make install PREFIX=$out
     '';
-  });
+  }) super.bustle;
 
   # Byte-compile elisp code for Emacs.
-  ghc-mod = overrideCabal super.ghc-mod (drv: {
+  ghc-mod = overrideCabal (drv: {
     preCheck = "export HOME=$TMPDIR";
     testToolDepends = drv.testToolDepends or [] ++ [self.cabal-install];
     doCheck = false;            # https://github.com/kazu-yamamoto/ghc-mod/issues/335
@@ -540,11 +540,11 @@ self: super: {
       mkdir -p $data/share/emacs/site-lisp
       ln -s "$lispdir/"*.el{,c} $data/share/emacs/site-lisp/
     '';
-  });
+  }) super.ghc-mod;
 
   # Build the latest git version instead of the official release. This isn't
   # ideal, but Chris doesn't seem to make official releases any more.
-  structured-haskell-mode = overrideCabal super.structured-haskell-mode (drv: {
+  structured-haskell-mode = overrideCabal (drv: {
     src = pkgs.fetchFromGitHub {
       owner = "projectional-haskell";
       repo = "structured-haskell-mode";
@@ -561,10 +561,10 @@ self: super: {
       mkdir -p $data/share/emacs
       ln -s $lispdir $data/share/emacs/site-lisp
     '';
-  });
+  }) super.structured-haskell-mode;
 
   # Make elisp files available at a location where people expect it.
-  hindent = (overrideCabal super.hindent (drv: {
+  hindent = (overrideCabal (drv: {
     # We cannot easily byte-compile these files, unfortunately, because they
     # depend on a new version of haskell-mode that we don't have yet.
     postInstall = ''
@@ -573,7 +573,7 @@ self: super: {
       ln -s $lispdir $data/share/emacs/site-lisp
     '';
     doCheck = false; # https://github.com/chrisdone/hindent/issues/299
-  }));
+  }) super.hindent);
 
   # https://github.com/bos/configurator/issues/22
   configurator = dontCheck super.configurator;
@@ -582,36 +582,36 @@ self: super: {
   concurrent-extra = dontCheck super.concurrent-extra;
 
   # https://github.com/bos/bloomfilter/issues/7
-  bloomfilter = appendPatch super.bloomfilter ./patches/bloomfilter-fix-on-32bit.patch;
+  bloomfilter = appendPatch ./patches/bloomfilter-fix-on-32bit.patch super.bloomfilter;
 
   # https://github.com/ashutoshrishi/hunspell-hs/pull/3
-  hunspell-hs = addPkgconfigDepend (dontCheck (appendPatch super.hunspell-hs ./patches/hunspell.patch)) pkgs.hunspell;
+  hunspell-hs = addPkgconfigDepend pkgs.hunspell (dontCheck (appendPatch ./patches/hunspell.patch super.hunspell-hs));
 
   # https://github.com/pxqr/base32-bytestring/issues/4
   base32-bytestring = dontCheck super.base32-bytestring;
 
   # Djinn's last release was 2014, incompatible with Semigroup-Monoid Proposal
   # https://github.com/augustss/djinn/pull/8
-  djinn = appendPatch super.djinn (pkgs.fetchpatch {
+  djinn = appendPatch (pkgs.fetchpatch {
     url = "https://github.com/augustss/djinn/commit/6cb9433a137fb6b5194afe41d616bd8b62b95630.patch";
     sha256 = "0s021y5nzrh74gfp8xpxpxm11ivzfs3jwg6mkrlyry3iy584xqil";
-  });
+  }) super.djinn;
 
   # We cannot build this package w/o the C library from <http://www.phash.org/>.
   phash = markBroken super.phash;
 
   # https://github.com/Philonous/hs-stun/pull/1
   # Remove if a version > 0.1.0.1 ever gets released.
-  stunclient = overrideCabal super.stunclient (drv: {
+  stunclient = overrideCabal (drv: {
     postPatch = (drv.postPatch or "") + ''
       substituteInPlace source/Network/Stun/MappedAddress.hs --replace "import Network.Endian" ""
     '';
-  });
+  }) super.stunclient;
 
   d-bus = let
     # The latest release on hackage is missing necessary patches for recent compilers
     # https://github.com/Philonous/d-bus/issues/24
-    newer = overrideSrc super.d-bus {
+    newer = overrideSrc {
       version = "unstable-2021-01-08";
       src = pkgs.fetchFromGitHub {
         owner = "Philonous";
@@ -619,13 +619,13 @@ self: super: {
         rev = "fb8a948a3b9d51db618454328dbe18fb1f313c70";
         hash = "sha256-R7/+okb6t9DAkPVUV70QdYJW8vRcvBdz4zKJT13jb3A=";
       };
-    };
+    } super.d-bus;
   # Add now required extension on recent compilers.
   # https://github.com/Philonous/d-bus/pull/23
-  in appendPatch newer (pkgs.fetchpatch {
+  in appendPatch (pkgs.fetchpatch {
     url = "https://github.com/Philonous/d-bus/commit/e5f37900a3a301c41d98bdaa134754894c705681.patch";
     sha256 = "6rQ7H9t483sJe1x95yLPAZ0BKTaRjgqQvvrQv7HkJRE=";
-  });
+  }) newer;
 
   # * The standard libraries are compiled separately.
   # * We need multiple patches from master to fix compilation with
@@ -704,10 +704,10 @@ self: super: {
 
   # Test suite fails: https://github.com/lymar/hastache/issues/46.
   # Don't install internal mkReadme tool.
-  hastache = overrideCabal super.hastache (drv: {
+  hastache = overrideCabal (drv: {
     doCheck = false;
     postInstall = "rm $out/bin/mkReadme && rmdir $out/bin";
-  });
+  }) super.hastache;
 
   # Has a dependency on outdated versions of directory.
   cautious-file = doJailbreak (dontCheck super.cautious-file);
@@ -725,14 +725,14 @@ self: super: {
   # Wrap the generated binaries to include their run-time dependencies in
   # $PATH. Also, cryptol needs a version of sbl that's newer than what we have
   # in LTS-13.x.
-  cryptol = overrideCabal super.cryptol (drv: {
+  cryptol = overrideCabal (drv: {
     buildTools = drv.buildTools or [] ++ [ pkgs.buildPackages.makeWrapper ];
     postInstall = drv.postInstall or "" + ''
       for b in $out/bin/cryptol $out/bin/cryptol-html; do
         wrapProgram $b --prefix 'PATH' ':' "${pkgs.lib.getBin pkgs.z3}/bin"
       done
     '';
-  });
+  }) super.cryptol;
 
   # Tests try to invoke external process and process == 1.4
   grakn = dontCheck (doJailbreak super.grakn);
@@ -748,7 +748,7 @@ self: super: {
   c2hs = dontCheck super.c2hs;
 
   # Needs pginit to function and pgrep to verify.
-  tmp-postgres = overrideCabal super.tmp-postgres (drv: {
+  tmp-postgres = overrideCabal (drv: {
     # Flaky tests: https://github.com/jfischoff/tmp-postgres/issues/274
     doCheck = false;
 
@@ -757,7 +757,7 @@ self: super: {
     '' + (drv.preCheck or "");
     libraryToolDepends = drv.libraryToolDepends or [] ++ [pkgs.buildPackages.postgresql];
     testToolDepends = drv.testToolDepends or [] ++ [pkgs.procps];
-  });
+  }) super.tmp-postgres;
 
   # Needs QuickCheck <2.10, which we don't have.
   edit-distance = doJailbreak super.edit-distance;
@@ -786,11 +786,11 @@ self: super: {
   # Jailbreak is necessary to break out of tasty < 1.x dependency.
   # hackage2nix generates this as a broken package due to the (fake) dependency
   # missing from hackage, so we need to fix the meta attribute set.
-  cryptohash-sha256 = overrideCabal super.cryptohash-sha256 (drv: {
+  cryptohash-sha256 = overrideCabal (drv: {
     jailbreak = true;
     broken = false;
     hydraPlatforms = pkgs.lib.platforms.all;
-  });
+  }) super.cryptohash-sha256;
 
   # The test suite has all kinds of out-dated dependencies, so it feels easier
   # to just disable it.
@@ -821,17 +821,17 @@ self: super: {
   protobuf = dontCheck super.protobuf;
 
   # Is this package still maintained? https://github.com/haskell/text-icu/issues/30
-  text-icu = overrideCabal super.text-icu (drv: {
+  text-icu = overrideCabal (drv: {
     doCheck = false;                                               # https://github.com/bos/text-icu/issues/32
     configureFlags = ["--ghc-option=-DU_DEFINE_FALSE_AND_TRUE=1"]; # https://github.com/haskell/text-icu/issues/49
-  });
+  }) super.text-icu;
 
   # jailbreak tasty < 1.2 until servant-docs > 0.11.3 is on hackage.
   servant-docs = doJailbreak super.servant-docs;
   snap-templates = doJailbreak super.snap-templates; # https://github.com/snapframework/snap-templates/issues/22
 
   # hledger-lib requires the latest version of pretty-simple
-  hledger-lib = appendPatch super.hledger-lib
+  hledger-lib = appendPatch
     # This patch has been merged but not released yet:
     # https://github.com/simonmichael/hledger/pull/1512. It is
     # important for ledger-autosync test suite:
@@ -842,7 +842,8 @@ self: super: {
       sha256 = "10knvrd5bl9nrmi27i0pm82sfr64jy04xgbjp228qywyijpr3pqv";
       includes = [ "Hledger/Read/CsvReader.hs" ];
       stripLen = 1;
-    });
+    })
+    super.hledger-lib;
 
   # hledger-lib 1.23 depends on doctest >= 0.18
   hledger-lib_1_23 = super.hledger-lib_1_23.override {
@@ -851,7 +852,7 @@ self: super: {
 
   # Copy hledger man pages from data directory into the proper place. This code
   # should be moved into the cabal2nix generator.
-  hledger = overrideCabal super.hledger (drv: {
+  hledger = overrideCabal (drv: {
     postInstall = ''
       # Don't install files that don't belong into this package to avoid
       # conflicts when hledger and hledger-ui end up in the same profile.
@@ -865,8 +866,8 @@ self: super: {
       mkdir -p $out/share/info
       cp -v embeddedfiles/*.info* $out/share/info/
     '';
-  });
-  hledger-ui = overrideCabal super.hledger-ui (drv: {
+  }) super.hledger;
+  hledger-ui = overrideCabal (drv: {
     postInstall = ''
       for i in $(seq 1 9); do
         for j in *.$i; do
@@ -877,8 +878,8 @@ self: super: {
       mkdir -p $out/share/info
       cp -v *.info* $out/share/info/
     '';
-  });
-  hledger-web = overrideCabal super.hledger-web (drv: {
+  }) super.hledger-ui;
+  hledger-web = overrideCabal (drv: {
     preCheck = "export HOME=$TMPDIR";
     postInstall = ''
       for i in $(seq 1 9); do
@@ -890,7 +891,7 @@ self: super: {
       mkdir -p $out/share/info
       cp -v *.info* $out/share/info/
     '';
-  });
+  }) super.hledger-web;
 
 
   # https://github.com/haskell-hvr/resolv/pull/6
@@ -901,20 +902,20 @@ self: super: {
   spdx = dontCheck super.spdx;
 
   # The test suite does not know how to find the 'alex' binary.
-  alex = overrideCabal super.alex (drv: {
+  alex = overrideCabal (drv: {
     testSystemDepends = (drv.testSystemDepends or []) ++ [pkgs.which];
     preCheck = ''export PATH="$PWD/dist/build/alex:$PATH"'';
-  });
+  }) super.alex;
 
   # This package refers to the wrong library (itself in fact!)
   vulkan = super.vulkan.override { vulkan = pkgs.vulkan-loader; };
 
   # Compiles some C or C++ source which requires these headers
-  VulkanMemoryAllocator = addExtraLibrary super.VulkanMemoryAllocator pkgs.vulkan-headers;
-  vulkan-utils = addExtraLibrary super.vulkan-utils pkgs.vulkan-headers;
+  VulkanMemoryAllocator = addExtraLibrary pkgs.vulkan-headers super.VulkanMemoryAllocator;
+  vulkan-utils = addExtraLibrary pkgs.vulkan-headers super.vulkan-utils;
 
   # https://github.com/dmwit/encoding/pull/3
-  encoding = doJailbreak (appendPatch super.encoding ./patches/encoding-Cabal-2.0.patch);
+  encoding = doJailbreak (appendPatch ./patches/encoding-Cabal-2.0.patch super.encoding);
 
   # Work around overspecified constraint on github ==0.18.
   github-backup = doJailbreak super.github-backup;
@@ -963,17 +964,17 @@ self: super: {
   brittany = doJailbreak (dontCheck super.brittany);  # Outdated upperbound on ghc-exactprint: https://github.com/lspitzner/brittany/issues/342
 
   # Fix with Cabal 2.2, https://github.com/guillaume-nargeot/hpc-coveralls/pull/73
-  hpc-coveralls = appendPatch super.hpc-coveralls (pkgs.fetchpatch {
+  hpc-coveralls = appendPatch (pkgs.fetchpatch {
     url = "https://github.com/guillaume-nargeot/hpc-coveralls/pull/73/commits/344217f513b7adfb9037f73026f5d928be98d07f.patch";
     sha256 = "056rk58v9h114mjx62f41x971xn9p3nhsazcf9zrcyxh1ymrdm8j";
-  });
+  }) super.hpc-coveralls;
 
   # sexpr is old, broken and has no issue-tracker. Let's fix it the best we can.
-  sexpr =
-    appendPatch (overrideCabal super.sexpr (drv: {
+  sexpr = appendPatch ./patches/sexpr-0.2.1.patch
+    (overrideCabal (drv: {
       isExecutable = false;
       libraryHaskellDepends = drv.libraryHaskellDepends ++ [self.QuickCheck];
-    })) ./patches/sexpr-0.2.1.patch;
+    }) super.sexpr);
 
   # https://github.com/haskell/hoopl/issues/50
   hoopl = dontCheck super.hoopl;
@@ -1011,9 +1012,9 @@ self: super: {
 
   # TODO(Profpatsch): factor out local nix store setup from
   # lib/tests/release.nix and use that for the tests of libnix
-  # libnix = overrideCabal super.libnix (old: {
+  # libnix = overrideCabal (old: {
   #   testToolDepends = old.testToolDepends or [] ++ [ pkgs.nix ];
-  # });
+  # }) super.libnix;
   libnix = dontCheck super.libnix;
 
   # dontCheck: The test suite tries to mess with ALSA, which doesn't work in the build sandbox.
@@ -1027,20 +1028,20 @@ self: super: {
   beam-core = doJailbreak super.beam-core;
 
   # Requires pg_ctl command during tests
-  beam-postgres = overrideCabal super.beam-postgres (drv: {
+  beam-postgres = overrideCabal (drv: {
     testToolDepends = (drv.testToolDepends or []) ++ [pkgs.postgresql];
-  });
+  }) super.beam-postgres;
 
   # Fix for base >= 4.11
-  scat = overrideCabal super.scat (drv: {
+  scat = overrideCabal (drv: {
     patches = [(pkgs.fetchpatch {
       url    = "https://github.com/redelmann/scat/pull/6.diff";
       sha256 = "07nj2p0kg05livhgp1hkkdph0j0a6lb216f8x348qjasy0lzbfhl";
     })];
-  });
+  }) super.scat;
 
   # Fix build with attr-2.4.48 (see #53716)
-  xattr = appendPatch super.xattr ./patches/xattr-fix-build.patch;
+  xattr = appendPatch ./patches/xattr-fix-build.patch super.xattr;
 
   # Some tests depend on a postgresql instance
   esqueleto = dontCheck super.esqueleto;
@@ -1066,13 +1067,13 @@ self: super: {
   openid = markBroken super.openid;
 
   # The test suite needs the packages's executables in $PATH to succeed.
-  arbtt = overrideCabal super.arbtt (drv: {
+  arbtt = overrideCabal (drv: {
     preCheck = ''
       for i in $PWD/dist/build/*; do
         export PATH="$i:$PATH"
       done
     '';
-  });
+  }) super.arbtt;
 
   # https://github.com/erikd/hjsmin/issues/32
   hjsmin = dontCheck super.hjsmin;
@@ -1081,7 +1082,7 @@ self: super: {
   language-ats = dontCheck super.language-ats;
 
   # Remove for hail > 0.2.0.0
-  hail = overrideCabal super.hail (drv: {
+  hail = overrideCabal (drv: {
     patches = [
       (pkgs.fetchpatch {
         # Relax dependency constraints,
@@ -1096,7 +1097,7 @@ self: super: {
         sha256 = "0dpagpn654zjrlklihsg911lmxjj8msylbm3c68xa5aad1s9gcf7";
       })
     ];
-  });
+  }) super.hail;
 
   # https://github.com/kazu-yamamoto/dns/issues/150
   dns = dontCheck super.dns;
@@ -1112,20 +1113,20 @@ self: super: {
   perhaps = doJailbreak super.perhaps;
 
   # it wants to build a statically linked binary by default
-  hledger-flow = overrideCabal super.hledger-flow ( drv: {
+  hledger-flow = overrideCabal (drv: {
     postPatch = (drv.postPatch or "") + ''
       substituteInPlace hledger-flow.cabal --replace "-static" ""
     '';
-  });
+  }) super.hledger-flow;
 
   # Chart-tests needs and compiles some modules from Chart itself
-  Chart-tests = overrideCabal (addExtraLibrary super.Chart-tests self.QuickCheck) (old: {
+  Chart-tests = overrideCabal (old: {
     # https://github.com/timbod7/haskell-chart/issues/233
     jailbreak = true;
     preCheck = old.preCheck or "" + ''
       tar --one-top-level=../chart --strip-components=1 -xf ${self.Chart.src}
     '';
-  });
+  }) (addExtraLibrary self.QuickCheck super.Chart-tests);
 
   # This breaks because of version bounds, but compiles and runs fine.
   # Last commit is 5 years ago, so we likely won't get upstream fixed soon.
@@ -1152,32 +1153,32 @@ self: super: {
 
   # Fix EdisonAPI and EdisonCore for GHC 8.8:
   # https://github.com/robdockins/edison/pull/16
-  EdisonAPI = appendPatch super.EdisonAPI (pkgs.fetchpatch {
+  EdisonAPI = appendPatch (pkgs.fetchpatch {
     url = "https://github.com/robdockins/edison/pull/16/commits/8da6c0f7d8666766e2f0693425c347c0adb492dc.patch";
     postFetch = ''
       ${pkgs.buildPackages.patchutils}/bin/filterdiff --include='a/edison-api/*' --strip=1 "$out" > "$tmpfile"
       mv "$tmpfile" "$out"
     '';
     sha256 = "0yi5pz039lcm4pl9xnl6krqxyqq5rgb5b6m09w0sfy06x0n4x213";
-  });
+  }) super.EdisonAPI;
 
-  EdisonCore = appendPatch super.EdisonCore (pkgs.fetchpatch {
+  EdisonCore = appendPatch (pkgs.fetchpatch {
     url = "https://github.com/robdockins/edison/pull/16/commits/8da6c0f7d8666766e2f0693425c347c0adb492dc.patch";
     postFetch = ''
       ${pkgs.buildPackages.patchutils}/bin/filterdiff --include='a/edison-core/*' --strip=1 "$out" > "$tmpfile"
       mv "$tmpfile" "$out"
     '';
     sha256 = "097wqn8hxsr50b9mhndg5pjim5jma2ym4ylpibakmmb5m98n17zp";
-  });
+  }) super.EdisonCore;
 
   # Pick patch from 1.6.0 which allows compilation with doctest 0.18
-  polysemy = appendPatches super.polysemy [
+  polysemy = appendPatches [
     (pkgs.fetchpatch {
       name = "allow-doctest-0.18.patch";
       url = "https://github.com/polysemy-research/polysemy/commit/dbcf851eb69395ce3143ecf2dd616dcad953a339.patch";
       sha256 = "1qf5pghc8p1glwaadkr95x12d74vhb98mg8dqwilyxbc6gq763w2";
     })
-  ];
+  ] super.polysemy;
 
   # polysemy-plugin 0.2.5.0 has constraint ghc-tcplugins-extra (==0.3.*)
   # This upstream issue is relevant:
@@ -1223,10 +1224,10 @@ self: super: {
 
   # add unreleased commit fixing version constraint as a patch
   # Can be removed if https://github.com/lpeterse/haskell-utc/issues/8 is resolved
-  utc = appendPatch super.utc (pkgs.fetchpatch {
+  utc = appendPatch (pkgs.fetchpatch {
     url = "https://github.com/lpeterse/haskell-utc/commit/e4502c08591e80d411129bb7c0414539f6302aaf.diff";
     sha256 = "0v6kv1d4syjzgzc2s7a76c6k4vminlcq62n7jg3nn9xd00gwmmv7";
-  });
+  }) super.utc;
 
   # Tests disabled because they assume to run in the whole jsaddle repo and not the hackage tarbal of jsaddle-warp.
   jsaddle-warp = dontCheck super.jsaddle-warp;
@@ -1251,9 +1252,9 @@ self: super: {
 
   # Fixed upstream but not released to Hackage yet:
   # https://github.com/k0001/hs-libsodium/issues/2
-  libsodium = overrideCabal super.libsodium (drv: {
+  libsodium = overrideCabal (drv: {
     libraryToolDepends = (drv.libraryToolDepends or []) ++ [self.buildHaskellPackages.c2hs];
-  });
+  }) super.libsodium;
 
   # https://github.com/kowainik/policeman/issues/57
   policeman = doJailbreak super.policeman;
@@ -1262,7 +1263,7 @@ self: super: {
   gi-cairo-render = doJailbreak super.gi-cairo-render;
   gi-cairo-connector = doJailbreak super.gi-cairo-connector;
 
-  svgcairo = appendPatches super.svgcairo [
+  svgcairo = appendPatches [
     # Remove when https://github.com/gtk2hs/svgcairo/pull/12 goes in.
     (pkgs.fetchpatch {
       url = "https://github.com/gtk2hs/svgcairo/commit/348c60b99c284557a522baaf47db69322a0a8b67.patch";
@@ -1273,17 +1274,17 @@ self: super: {
       url = "https://github.com/dalpd/svgcairo/commit/d1e0d7ae04c1edca83d5b782e464524cdda6ae85.patch";
       sha256 = "1pq9ld9z67zsxj8vqjf82qwckcp69lvvnrjb7wsyb5jc6jaj3q0a";
     })
-  ];
+  ] super.svgcairo;
 
   # Missing -Iinclude parameter to doc-tests (pull has been accepted, so should be resolved when 0.5.3 released)
   # https://github.com/lehins/massiv/pull/104
   massiv = dontCheck super.massiv;
 
   # Upstream PR: https://github.com/jkff/splot/pull/9
-  splot = appendPatch super.splot (pkgs.fetchpatch {
+  splot = appendPatch (pkgs.fetchpatch {
     url = "https://github.com/jkff/splot/commit/a6710b05470d25cb5373481cf1cfc1febd686407.patch";
     sha256 = "1c5ck2ibag2gcyag6rjivmlwdlp5k0dmr8nhk7wlkzq2vh7zgw63";
-  });
+  }) super.splot;
 
   # Tests are broken because of missing files in hackage tarball.
   # https://github.com/jgm/commonmark-hs/issues/55
@@ -1304,7 +1305,11 @@ self: super: {
   Spock-core = dontCheck super.Spock-core;
 
   # hasura packages need some extra care
-  graphql-engine = overrideCabal (super.graphql-engine.overrideScope (self: super: {
+  graphql-engine = overrideCabal (drv: {
+    patches = [ ./patches/graphql-engine-mapkeys.patch ];
+    doHaddock = false;
+    version = "2.0.9";
+  }) (super.graphql-engine.overrideScope (self: super: {
     immortal = self.immortal_0_2_2_1;
     resource-pool = self.hasura-resource-pool;
     ekg-core = self.hasura-ekg-core;
@@ -1313,11 +1318,7 @@ self: super: {
     hspec-core = dontCheck self.hspec-core_2_8_3;
     hspec-discover = dontCheck super.hspec-discover_2_8_3;
     tasty-hspec = self.tasty-hspec_1_2;
-  })) (drv: {
-    patches = [ ./patches/graphql-engine-mapkeys.patch ];
-    doHaddock = false;
-    version = "2.0.9";
-  });
+  }));
   hasura-ekg-core = super.hasura-ekg-core.overrideScope (self: super: {
     hspec = dontCheck self.hspec_2_8_3;
     hspec-core = dontCheck self.hspec-core_2_8_3;
@@ -1329,18 +1330,18 @@ self: super: {
     hspec-core = dontCheck self.hspec-core_2_8_3;
     hspec-discover = dontCheck super.hspec-discover_2_8_3;
   });
-  pg-client = overrideCabal (super.pg-client.override {
-    resource-pool = self.hasura-resource-pool;
-  }) (drv: {
+  pg-client = overrideCabal (drv: {
     librarySystemDepends = with pkgs; [ postgresql krb5.dev openssl.dev ];
     # wants a running DB to check against
     doCheck = false;
+  }) (super.pg-client.override {
+    resource-pool = self.hasura-resource-pool;
   });
 
   # https://github.com/bos/statistics/issues/170
   statistics = dontCheck super.statistics;
 
-  hcoord = overrideCabal super.hcoord (drv: {
+  hcoord = overrideCabal (drv: {
     # Remove when https://github.com/danfran/hcoord/pull/8 is merged.
     patches = [
       (pkgs.fetchpatch {
@@ -1350,7 +1351,7 @@ self: super: {
     ];
     # Remove when https://github.com/danfran/hcoord/issues/9 is closed.
     doCheck = false;
-  });
+  }) super.hcoord;
 
   # Tests rely on `Int` being 64-bit: https://github.com/hspec/hspec/issues/431.
   # Also, we need QuickCheck-2.14.x to build the test suite, which isn't easy in LTS-16.x.
@@ -1375,14 +1376,14 @@ self: super: {
   #   PATH.
   update-nix-fetchgit = let deps = [ pkgs.git pkgs.nix pkgs.nix-prefetch-git ];
   in generateOptparseApplicativeCompletion "update-nix-fetchgit" (overrideCabal
-    (addTestToolDepends super.update-nix-fetchgit deps) (drv: {
+    (drv: {
       buildTools = drv.buildTools or [ ] ++ [ pkgs.buildPackages.makeWrapper ];
       postInstall = drv.postInstall or "" + ''
         wrapProgram "$out/bin/update-nix-fetchgit" --prefix 'PATH' ':' "${
           pkgs.lib.makeBinPath deps
         }"
       '';
-    }));
+    }) (addTestToolDepends deps super.update-nix-fetchgit));
 
   # Our quickcheck-instances is too old for the newer binary-instances, but
   # quickcheck-instances is only used in the tests of binary-instances.
@@ -1475,15 +1476,15 @@ self: super: {
   hercules-ci-cli = generateOptparseApplicativeCompletion "hci" (
     # See hercules-ci-optparse-applicative in non-hackage-packages.nix.
     addBuildDepend
-      (overrideCabal
-        (unmarkBroken super.hercules-ci-cli)
-        (drv: { hydraPlatforms = super.hercules-ci-cli.meta.platforms; }))
       super.hercules-ci-optparse-applicative
+      (overrideCabal
+        (drv: { hydraPlatforms = super.hercules-ci-cli.meta.platforms; })
+        (unmarkBroken super.hercules-ci-cli))
   );
 
   # Readline uses Distribution.Simple from Cabal 2, in a way that is not
   # compatible with Cabal 3. No upstream repository found so far
-  readline =  appendPatch super.readline ./patches/readline-fix-for-cabal-3.patch;
+  readline = appendPatch ./patches/readline-fix-for-cabal-3.patch super.readline;
 
   # 2020-12-05: this package requires a newer version of http-client,
   # but it still compiles with older version:
@@ -1543,9 +1544,7 @@ self: super: {
   # Dependency to regex-tdfa-text can be removed for later regex-tdfa versions.
   # Fix protolude compilation error by applying patch from pull-request.
   # Override can be removed for the next release > 0.8.0.
-  yarn2nix = overrideCabal (super.yarn2nix.override {
-    regex-tdfa-text = null;
-  }) (attrs: {
+  yarn2nix = overrideCabal (attrs: {
     jailbreak = true;
     # remove dependency on regex-tdfa-text
     # which has been merged into regex-tdfa
@@ -1560,6 +1559,8 @@ self: super: {
         includes = [ "*/ResolveLockfile.hs" ];
       })
     ];
+  }) (super.yarn2nix.override {
+    regex-tdfa-text = null;
   });
 
   # cabal-install switched to build type simple in 3.2.0.0
@@ -1570,26 +1571,26 @@ self: super: {
   # override.
   # The commit that introduced this change:
   # https://github.com/haskell/cabal/commit/91ac075930c87712eeada4305727a4fa651726e7
-  cabal-install = overrideCabal super.cabal-install (old: {
+  cabal-install = overrideCabal (old: {
     postInstall = old.postInstall + ''
       mkdir -p "$out/share/man/man1"
       "$out/bin/cabal" man --raw > "$out/share/man/man1/cabal.1"
     '';
-  });
+  }) super.cabal-install;
 
   # while waiting for a new release: https://github.com/brendanhay/amazonka/pull/572
-  amazonka = appendPatches (doJailbreak super.amazonka) [
+  amazonka = appendPatches [
     (pkgs.fetchpatch {
       stripLen = 1;
       url = "https://github.com/brendanhay/amazonka/commit/43ddd87b1ebd6af755b166e16336259ec025b337.patch";
       sha256 = "1x9l5xgvrh908di6whpavyp08cys11v3yn6rc21zw87xiyigdbi3";
     })
-  ];
+  ] (doJailbreak super.amazonka);
 
   # Test suite does not compile.
   feed = dontCheck super.feed;
 
-  spacecookie = overrideCabal super.spacecookie (old: {
+  spacecookie = overrideCabal (old: {
     buildTools = (old.buildTools or []) ++ [ pkgs.buildPackages.installShellFiles ];
     # let testsuite discover the resulting binary
     preCheck = ''
@@ -1599,7 +1600,7 @@ self: super: {
     postInstall = ''
       installManPage docs/man/*
     '' + (old.postInstall or "");
-  });
+  }) super.spacecookie;
 
   # Patch and jailbreak can be removed at next release, chatter > 0.9.1.0
   # * Remove dependency on regex-tdfa-text
@@ -1607,11 +1608,11 @@ self: super: {
   # * Disable test suite which doesn't compile
   #   https://github.com/creswick/chatter/issues/38
   chatter = appendPatch
-    (dontCheck (doJailbreak (super.chatter.override { regex-tdfa-text = null; })))
     (pkgs.fetchpatch {
       url = "https://github.com/creswick/chatter/commit/e8c15a848130d7d27b8eb5e73e8a0db1366b2e62.patch";
       sha256 = "1dzak8d12h54vss5fxnrclygz0fz9ygbqvxd5aifz5n3vrwwpj3g";
-    });
+    })
+    (dontCheck (doJailbreak (super.chatter.override { regex-tdfa-text = null; })));
 
   # test suite doesn't compile anymore due to changed hunit/tasty APIs
   fullstop = dontCheck super.fullstop;
@@ -1647,15 +1648,15 @@ self: super: {
 
   # Too strict version bounds on base16-bytestring and http-link-header.
   # This patch will be merged when next release comes.
-  github = appendPatch super.github (pkgs.fetchpatch {
+  github = appendPatch (pkgs.fetchpatch {
     url = "https://github.com/phadej/github/commit/514b175851dd7c4a9722ff203dd6f652a15d33e8.patch";
     sha256 = "0pmx54xd7ah85y9mfi5366wbnwrp918j0wbx8yw8hrdac92qi4gh";
-  });
+  }) super.github;
 
   # list `modbus` in librarySystemDepends, correct to `libmodbus`
-  libmodbus = overrideCabal super.libmodbus (drv: {
+  libmodbus = overrideCabal (drv: {
     librarySystemDepends = [ pkgs.libmodbus ];
-  });
+  }) super.libmodbus;
 
   # 2021-04-02: Outdated optparse-applicative bound is fixed but not realeased on upstream.
   trial-optparse-applicative = assert super.trial-optparse-applicative.version == "0.0.0.0"; doJailbreak super.trial-optparse-applicative;
@@ -1665,18 +1666,18 @@ self: super: {
 
   # 2021-04-02: iCalendar is basically unmaintained.
   # There are PRs for bumping the bounds: https://github.com/chrra/iCalendar/pull/46
-  iCalendar = overrideCabal (doJailbreak super.iCalendar) {
+  iCalendar = overrideCabal {
       # Overriding bounds behind a cabal flag
       preConfigure = ''substituteInPlace iCalendar.cabal --replace "network >=2.6 && <2.7" "network -any"'';
-  };
+  } (doJailbreak super.iCalendar);
 
   # Apply patch from master relaxing the version bounds on tasty.
   # Can be removed at next release (current is 0.10.1.0).
-  ginger = appendPatch super.ginger
+  ginger = appendPatch
     (pkgs.fetchpatch {
       url = "https://github.com/tdammers/ginger/commit/bd8cb39c1853d4fb4f663c4c201884575906acea.patch";
       sha256 = "1rdy53k0384g52bnc59j1f0i13hr4lbnbksfsabr4av6zmw9wmzf";
-    });
+    }) super.ginger;
 
   # Too strict version bounds on cryptonite
   # https://github.com/obsidiansystems/haveibeenpwned/issues/7
@@ -1711,7 +1712,7 @@ self: super: {
   # is merged and released:
   # * https://gitlab.haskell.org/ghc/ghc/-/issues/19638
   # * https://gitlab.haskell.org/ghc/ghc/-/merge_requests/5454
-  ghc-bignum = overrideCabal super.ghc-bignum (old: {
+  ghc-bignum = overrideCabal (old: {
     configureFlags = (old.configureFlags or []) ++ [ "-f" "Native" ];
     patches = (old.patches or []) ++ [
       (pkgs.fetchpatch {
@@ -1720,7 +1721,7 @@ self: super: {
         stripLen = 2;
       })
     ];
-  });
+  }) super.ghc-bignum;
 
   # 2021-04-09: outdated base and alex-tools
   # PR pending https://github.com/glguy/language-lua/pull/6
@@ -1735,19 +1736,19 @@ self: super: {
   lzma-static = doJailbreak super.lzma-static;
 
   # Fix haddock errors: https://github.com/koalaman/shellcheck/issues/2216
-  ShellCheck = appendPatch super.ShellCheck (pkgs.fetchpatch {
+  ShellCheck = appendPatch (pkgs.fetchpatch {
     url = "https://github.com/koalaman/shellcheck/commit/9e60b3ea841bcaf48780bfcfc2e44aa6563a62de.patch";
     sha256 = "1vmg8mmmnph34x7y0mhkcd5nzky8f1rh10pird750xbkp9zlk099";
     excludes = ["test/buildtest"];
-  });
+  }) super.ShellCheck;
 
   # Too strict version bounds on base:
   # https://github.com/obsidiansystems/database-id/issues/1
   database-id-class = doJailbreak super.database-id-class;
 
-  cabal2nix-unstable = overrideCabal super.cabal2nix-unstable {
+  cabal2nix-unstable = overrideCabal {
     passthru.updateScript = ../../../maintainers/scripts/haskell/update-cabal2nix-unstable.sh;
-  };
+  } super.cabal2nix-unstable;
 
   # Too strict version bounds on base
   # https://github.com/gibiansky/IHaskell/issues/1217
@@ -1756,37 +1757,38 @@ self: super: {
 
   # Fixes too strict version bounds on regex libraries
   # Presumably to be removed at the next release
-  yi-language = appendPatch super.yi-language (pkgs.fetchpatch {
+  yi-language = appendPatch (pkgs.fetchpatch {
     url = "https://github.com/yi-editor/yi/commit/0d3bcb5ba4c237d57ce33a3dc39b63c56d890765.patch";
     sha256 = "0r4mzngs0x1akqpajzx7ssa9rax977fvj5ra8d3grfbpx6z0nm01";
     includes = [ "yi-language.cabal" ];
     stripLen = 2;
     extraPrefix = "";
-  });
+  }) super.yi-language;
 
   # https://github.com/ghcjs/jsaddle/issues/123
-  jsaddle = overrideCabal super.jsaddle (drv: {
+  jsaddle = overrideCabal (drv: {
     # lift conditional version constraint on ref-tf
     postPatch = ''
       sed -i 's/ref-tf.*,/ref-tf,/' jsaddle.cabal
     '' + (drv.postPatch or "");
-  });
+  }) super.jsaddle;
 
   # Tests need to lookup target triple x86_64-unknown-linux
   # https://github.com/llvm-hs/llvm-hs/issues/334
-  llvm-hs = overrideCabal super.llvm-hs {
+  llvm-hs = overrideCabal {
     doCheck = pkgs.stdenv.targetPlatform.system == "x86_64-linux";
-  };
+  } super.llvm-hs;
 
   # * Fix build failure by picking patch from 8.5, we need
   #   this version of sbv for petrinizer
   # * Pin version of crackNum that still exposes its library
-  sbv_7_13 = appendPatch (super.sbv_7_13.override {
-    crackNum = self.crackNum_2_4;
-  }) (pkgs.fetchpatch {
-    url = "https://github.com/LeventErkok/sbv/commit/57014b9c7c67dd9b63619a996e2c66e32c33c958.patch";
-    sha256 = "10npa8nh2413n6p6qld795qfkbld08icm02bspmk93y0kabpgmgm";
-  });
+  sbv_7_13 = appendPatch (pkgs.fetchpatch {
+      url = "https://github.com/LeventErkok/sbv/commit/57014b9c7c67dd9b63619a996e2c66e32c33c958.patch";
+      sha256 = "10npa8nh2413n6p6qld795qfkbld08icm02bspmk93y0kabpgmgm";
+    })
+    (super.sbv_7_13.override {
+      crackNum = self.crackNum_2_4;
+    });
 
   # Too strict bounds on dimensional
   # https://github.com/enomsg/science-constants-dimensional/pull/1
@@ -1815,7 +1817,7 @@ self: super: {
 
   # Build haskell-ci from git repository, including some useful fixes,
   # e. g. required for generating the workflows for the cabal2nix repository
-  haskell-ci-unstable = (overrideSrc super.haskell-ci {
+  haskell-ci-unstable = (overrideSrc {
     version = "0.13.20211011";
     src = pkgs.fetchFromGitHub {
       owner = "haskell-CI";
@@ -1823,23 +1825,23 @@ self: super: {
       rev = "c88e67e675bc4a990da53863c7fb42e67bcf9847";
       sha256 = "1zhv1cg047lfyxfs3mvc73vv96pn240zaj7f2yl4lw5yj6y5rfk9";
     };
-  }).overrideScope (self: super: {
+  } super.haskell-ci).overrideScope (self: super: {
     attoparsec = self.attoparsec_0_14_2;
     Cabal = self.Cabal_3_6_2_0;
   });
 
-  Frames-streamly = overrideCabal (super.Frames-streamly.override { relude = super.relude_1_0_0_1; }) (drv: {
+  Frames-streamly = overrideCabal (drv: {
     # https://github.com/adamConnerSax/Frames-streamly/issues/1
     patchPhase = ''
 cat > example_data/acs100k.csv <<EOT
 "YEAR","REGION","STATEFIP","DENSITY","METRO","PUMA","PERWT","SEX","AGE","RACE","RACED","HISPAN","HISPAND","CITIZEN","LANGUAGE","LANGUAGED","SPEAKENG","EDUC","EDUCD","GRADEATT","GRADEATTD","EMPSTAT","EMPSTATD","INCTOT","INCSS","POVERTY"
 2006,32,1,409.6,3,2300,87.0,1,47,1,100,0,0,0,1,100,3,6,65,0,0,1,12,36000,0,347
 EOT
-    ''; });
+    ''; }) (super.Frames-streamly.override { relude = super.relude_1_0_0_1; });
 
   # 2021-05-09: compilation requires patches from master,
   # remove at next release (current is 0.1.0.4).
-  large-hashable = overrideCabal super.large-hashable (drv: {
+  large-hashable = overrideCabal (drv: {
     # fix line endings which are an issue all of a sudden for an unknown reason
     prePatch = ''
       find . -type f -print0 | xargs -0 ${pkgs.buildPackages.dos2unix}/bin/dos2unix
@@ -1862,13 +1864,13 @@ EOT
         sha256 = "1sf9h3k8jbbgfshzrclaawlwx7k2frb09z2a64f93jhvk6ci6vgx";
       })
     ];
-  });
+  }) super.large-hashable;
 
   # BSON defaults to requiring network instead of network-bsd which is
   # required nowadays: https://github.com/mongodb-haskell/bson/issues/26
-  bson = appendConfigureFlag (super.bson.override {
+  bson = appendConfigureFlag "-f-_old_network" (super.bson.override {
     network = self.network-bsd;
-  }) "-f-_old_network";
+  });
 
   # 2021-05-14: Testsuite is failing.
   # https://github.com/kcsongor/generic-lens/issues/133
@@ -1876,7 +1878,7 @@ EOT
 
   # 2021-05-19: Allow random 1.2.0
   # Remove at (presumably next release) which is > 1.3.1.0
-  hashable = overrideCabal super.hashable (drv: {
+  hashable = overrideCabal (drv: {
     patches = [
       (pkgs.fetchpatch {
         url = "https://github.com/haskell-unordered-containers/hashable/commit/78fa8fdb4f8bec5d221f34110d6afa0d0a00b5f9.patch";
@@ -1887,7 +1889,7 @@ EOT
     prePatch = ''
       ${pkgs.buildPackages.dos2unix}/bin/dos2unix hashable.cabal
     '' + (drv.prePatch or "");
-  });
+  }) super.hashable;
 
   # Too strict bound on random
   # https://github.com/haskell-hvr/missingh/issues/56
@@ -1895,17 +1897,17 @@ EOT
 
   # Disable flaky tests
   # https://github.com/DavidEichmann/alpaca-netcode/issues/2
-  alpaca-netcode = overrideCabal super.alpaca-netcode {
+  alpaca-netcode = overrideCabal {
     testFlags = [ "--pattern" "!/[NOCI]/" ];
-  };
+  } super.alpaca-netcode;
 
   # 2021-05-22: Tests fail sometimes (even consistently on hydra)
   # when running a fs-related test with >= 12 jobs. To work around
   # this, run tests with only a single job.
   # https://github.com/vmchale/libarchive/issues/20
-  libarchive = overrideCabal super.libarchive {
+  libarchive = overrideCabal {
     testFlags = [ "-j1" ];
-  };
+  } super.libarchive;
 
   # unrestrict bounds for hashable and semigroups
   # https://github.com/HeinrichApfelmus/reactive-banana/issues/215
@@ -1989,16 +1991,16 @@ EOT
   # * https://gitlab.haskell.org/ghc/ghc/-/issues/17203
   # * https://github.com/gtk2hs/gtk2hs/issues/305
   # * https://github.com/gtk2hs/gtk2hs/issues/279
-  gtk2hs-buildtools = appendConfigureFlags super.gtk2hs-buildtools
+  gtk2hs-buildtools = appendConfigureFlags
     (pkgs.lib.optionals (with pkgs.stdenv.hostPlatform; isAarch64 || isPowerPC) [
       "--ghc-option=-O0"
-    ]);
+    ]) super.gtk2hs-buildtools;
 
   # https://github.com/ajscholl/basic-cpuid/pull/1
-  basic-cpuid = appendPatch super.basic-cpuid (pkgs.fetchpatch {
+  basic-cpuid = appendPatch (pkgs.fetchpatch {
     url = "https://github.com/ajscholl/basic-cpuid/commit/2f2bd7a7b53103fb0cf26883f094db9d7659887c.patch";
     sha256 = "0l15ccfdys100jf50s9rr4p0d0ikn53bkh7a9qlk9i0y0z5jc6x1";
-  });
+  }) super.basic-cpuid;
 
   # Needs Cabal >= 3.4
   chs-cabal = super.chs-cabal.override {
@@ -2014,7 +2016,7 @@ EOT
   lsp-types = doDistribute self.lsp-types_1_3_0_1;
   # Not running the "example" test because it requires a binary from lsps test
   # suite which is not part of the output of lsp.
-  lsp-test = doDistribute (overrideCabal self.lsp-test_0_14_0_1 (old: { testTarget = "tests func-test"; }));
+  lsp-test = doDistribute (overrideCabal (old: { testTarget = "tests func-test"; }) self.lsp-test_0_14_0_1);
 
   # 2021-09-14: Tests are flaky.
   hls-splice-plugin = dontCheck super.hls-splice-plugin;
@@ -2041,22 +2043,22 @@ EOT
 
   # Fixes https://github.com/NixOS/nixpkgs/issues/140613
   # https://github.com/recursion-schemes/recursion-schemes/issues/128
-  recursion-schemes = appendPatch super.recursion-schemes ./patches/recursion-schemes-128.patch;
+  recursion-schemes = appendPatch ./patches/recursion-schemes-128.patch super.recursion-schemes;
 
   # Fix from https://github.com/brendanhay/gogol/pull/144 which has seen no release
   # Can't use fetchpatch as it required tweaking the line endings as the .cabal
   # file revision on hackage was gifted CRLF line endings
-  gogol-core = appendPatch super.gogol-core ./patches/gogol-core-144.patch;
+  gogol-core = appendPatch ./patches/gogol-core-144.patch super.gogol-core;
 
   # 2021-11-05: patch to permit our language-docker version
   # This is based on c931c0a9689cd6dff4d2083fa002414c1f08a586 from
   # language-docker upstream
-  hadolint = appendPatch (super.hadolint.override {
-    language-docker = self.language-docker_10_3_0;
-  }) (pkgs.fetchpatch {
+  hadolint = appendPatch (pkgs.fetchpatch {
     url = "https://github.com/hadolint/hadolint/commit/c931c0a9689cd6dff4d2083fa002414c1f08a586.patch";
     sha256 = "1kv06hfn7lgrcrg56q8lq0pvdffqvmjbshazg3prlhl3kjs541f8";
     excludes = [ "stack.yaml" "package.yaml" "hadolint.cabal" ];
+  }) (super.hadolint.override {
+    language-docker = self.language-docker_10_3_0;
   });
 
   # These should be updated in lockstep
diff --git a/pkgs/development/haskell-modules/configuration-darwin.nix b/pkgs/development/haskell-modules/configuration-darwin.nix
index 39e025cbd26..d679ad88d67 100644
--- a/pkgs/development/haskell-modules/configuration-darwin.nix
+++ b/pkgs/development/haskell-modules/configuration-darwin.nix
@@ -18,21 +18,21 @@ self: super: ({
     __darwinAllowLocalNetworking = true;
   });
 
-  halive = addBuildDepend super.halive darwin.apple_sdk.frameworks.AppKit;
+  halive = addBuildDepend darwin.apple_sdk.frameworks.AppKit super.halive;
 
   # Hakyll's tests are broken on Darwin (3 failures); and they require util-linux
-  hakyll = overrideCabal super.hakyll {
+  hakyll = overrideCabal {
     testToolDepends = [];
     doCheck = false;
-  };
+  } super.hakyll;
 
-  barbly = addBuildDepend super.barbly darwin.apple_sdk.frameworks.AppKit;
+  barbly = addBuildDepend darwin.apple_sdk.frameworks.AppKit super.barbly;
 
-  double-conversion = addExtraLibrary super.double-conversion pkgs.libcxx;
+  double-conversion = addExtraLibrary pkgs.libcxx super.double-conversion;
 
-  apecs-physics = addPkgconfigDepends super.apecs-physics [
+  apecs-physics = addPkgconfigDepends [
     darwin.apple_sdk.frameworks.ApplicationServices
-  ];
+  ] super.apecs-physics;
 
   # "erf table" test fails on Darwin
   # https://github.com/bos/math-functions/issues/63
@@ -40,11 +40,11 @@ self: super: ({
 
   # darwin doesn't have sub-second resolution
   # https://github.com/hspec/mockery/issues/11
-  mockery = overrideCabal super.mockery (drv: {
+  mockery = overrideCabal (drv: {
     preCheck = ''
       export TRAVIS=true
     '' + (drv.preCheck or "");
-  });
+  }) super.mockery;
 
   # https://github.com/ndmitchell/shake/issues/206
   shake = dontCheck super.shake;
@@ -53,18 +53,18 @@ self: super: ({
 
   # gtk/gtk3 needs to be told on Darwin to use the Quartz
   # rather than X11 backend (see eg https://github.com/gtk2hs/gtk2hs/issues/249).
-  gtk3 = appendConfigureFlag super.gtk3 "-f have-quartz-gtk";
-  gtk = appendConfigureFlag super.gtk "-f have-quartz-gtk";
+  gtk3 = appendConfigureFlag "-f have-quartz-gtk" super.gtk3;
+  gtk = appendConfigureFlag "-f have-quartz-gtk" super.gtk;
 
-  OpenAL = addExtraLibrary super.OpenAL darwin.apple_sdk.frameworks.OpenAL;
+  OpenAL = addExtraLibrary darwin.apple_sdk.frameworks.OpenAL super.OpenAL;
 
-  al = overrideCabal super.al (drv: {
+  al = overrideCabal (drv: {
     libraryFrameworkDepends = [
       darwin.apple_sdk.frameworks.OpenAL
     ] ++ (drv.libraryFrameworkDepends or []);
-  });
+  }) super.al;
 
-  proteaaudio = addExtraLibrary super.proteaaudio darwin.apple_sdk.frameworks.AudioToolbox;
+  proteaaudio = addExtraLibrary darwin.apple_sdk.frameworks.AudioToolbox super.proteaaudio;
 
   # the system-fileio tests use canonicalizePath, which fails in the sandbox
   system-fileio = dontCheck super.system-fileio;
@@ -80,17 +80,17 @@ self: super: ({
   # TODO(matthewbauer): If someone really needs this to work in sandboxes,
   # I think we can add a propagatedImpureHost dep here, but I’m hoping to
   # get a proper fix available soonish.
-  x509-system = overrideCabal super.x509-system (drv:
+  x509-system = overrideCabal (drv:
     lib.optionalAttrs (!pkgs.stdenv.cc.nativeLibc) {
       postPatch = ''
         substituteInPlace System/X509/MacOS.hs --replace security /usr/bin/security
       '' + (drv.postPatch or "");
-    });
+    }) super.x509-system;
 
   # https://github.com/haskell-foundation/foundation/pull/412
   foundation = dontCheck super.foundation;
 
-  llvm-hs = overrideCabal super.llvm-hs (oldAttrs: {
+  llvm-hs = overrideCabal (oldAttrs: {
     # One test fails on darwin.
     doCheck = false;
     # llvm-hs's Setup.hs file tries to add the lib/ directory from LLVM8 to
@@ -100,20 +100,20 @@ self: super: ({
     preCompileBuildDriver = ''
       substituteInPlace Setup.hs --replace "addToLdLibraryPath libDir" "pure ()"
     '' + (oldAttrs.preCompileBuildDriver or "");
-  });
+  }) super.llvm-hs;
 
-  yesod-bin = addBuildDepend super.yesod-bin darwin.apple_sdk.frameworks.Cocoa;
+  yesod-bin = addBuildDepend darwin.apple_sdk.frameworks.Cocoa super.yesod-bin;
 
-  hmatrix = addBuildDepend super.hmatrix darwin.apple_sdk.frameworks.Accelerate;
+  hmatrix = addBuildDepend darwin.apple_sdk.frameworks.Accelerate super.hmatrix;
 
-  blas-hs = overrideCabal super.blas-hs (drv: {
+  blas-hs = overrideCabal (drv: {
     libraryFrameworkDepends = [
       darwin.apple_sdk.frameworks.Accelerate
     ] ++ (drv.libraryFrameworkDepends or []);
-  });
+  }) super.blas-hs;
 
   # Ensure the necessary frameworks are propagatedBuildInputs on darwin
-  OpenGLRaw = overrideCabal super.OpenGLRaw (drv: {
+  OpenGLRaw = overrideCabal (drv: {
     librarySystemDepends = [];
     libraryHaskellDepends = drv.libraryHaskellDepends ++ [
       darwin.apple_sdk.frameworks.OpenGL
@@ -123,14 +123,14 @@ self: super: ({
       frameworkPaths=$(IFS=, ; echo "''${frameworkPaths[@]}")
       configureFlags+=$(if [ -n "$frameworkPaths" ]; then echo -n "--ghc-options=-optl=$frameworkPaths"; fi)
     '' + (drv.preConfigure or "");
-  });
-  GLURaw = overrideCabal super.GLURaw (drv: {
+  }) super.OpenGLRaw;
+  GLURaw = overrideCabal (drv: {
     librarySystemDepends = [];
     libraryHaskellDepends = drv.libraryHaskellDepends ++ [
       darwin.apple_sdk.frameworks.OpenGL
     ];
-  });
-  bindings-GLFW = overrideCabal super.bindings-GLFW (drv: {
+  }) super.GLURaw;
+  bindings-GLFW = overrideCabal (drv: {
     librarySystemDepends = [];
     libraryHaskellDepends = drv.libraryHaskellDepends ++ [
       darwin.apple_sdk.frameworks.AGL
@@ -141,13 +141,13 @@ self: super: ({
       darwin.apple_sdk.frameworks.CoreVideo
       darwin.CF
     ];
-  });
-  OpenCL = overrideCabal super.OpenCL (drv: {
+  }) super.bindings-GLFW;
+  OpenCL = overrideCabal (drv: {
     librarySystemDepends = [];
     libraryHaskellDepends = drv.libraryHaskellDepends ++ [
       darwin.apple_sdk.frameworks.OpenCL
     ];
-  });
+  }) super.OpenCL;
 
   # cabal2nix likes to generate dependencies on hinotify when hfsevents is
   # really required on darwin: https://github.com/NixOS/cabal2nix/issues/146.
@@ -155,37 +155,37 @@ self: super: ({
 
   # FSEvents API is very buggy and tests are unreliable. See
   # http://openradar.appspot.com/10207999 and similar issues.
-  fsnotify = addBuildDepend (dontCheck super.fsnotify)
-    darwin.apple_sdk.frameworks.Cocoa;
+  fsnotify = addBuildDepend darwin.apple_sdk.frameworks.Cocoa
+    (dontCheck super.fsnotify);
 
-  FractalArt = overrideCabal super.FractalArt (drv: {
+  FractalArt = overrideCabal (drv: {
     librarySystemDepends = [
       darwin.libobjc
       darwin.apple_sdk.frameworks.AppKit
     ] ++ (drv.librarySystemDepends or []);
-  });
+  }) super.FractalArt;
 
-  arbtt = overrideCabal super.arbtt (drv: {
+  arbtt = overrideCabal (drv: {
     librarySystemDepends = [
       darwin.apple_sdk.frameworks.Foundation
       darwin.apple_sdk.frameworks.Carbon
       darwin.apple_sdk.frameworks.IOKit
     ] ++ (drv.librarySystemDepends or []);
-  });
+  }) super.arbtt;
 
-  HTF = overrideCabal super.HTF (drv: {
+  HTF = overrideCabal (drv: {
     # GNU find is not prefixed in stdenv
     postPatch = ''
       substituteInPlace scripts/local-htfpp --replace "find=gfind" "find=find"
     '' + (drv.postPatch or "");
-  });
+  }) super.HTF;
 
   # conditional dependency via a cabal flag
-  cas-store = overrideCabal super.cas-store (drv: {
+  cas-store = overrideCabal (drv: {
     libraryHaskellDepends = [
       self.kqueue
     ] ++ (drv.libraryHaskellDepends or []);
-  });
+  }) super.cas-store;
 
   # 2021-05-25: Tests fail and I have no way to debug them.
   hls-class-plugin = dontCheck super.hls-class-plugin;
@@ -204,13 +204,13 @@ self: super: ({
 
   # On darwin librt doesn't exist and will fail to link against,
   # however linking against it is also not necessary there
-  GLHUI = overrideCabal super.GLHUI (drv: {
+  GLHUI = overrideCabal (drv: {
     postPatch = ''
       substituteInPlace GLHUI.cabal --replace " rt" ""
     '' + (drv.postPatch or "");
-  });
+  }) super.GLHUI;
 
-  SDL-image = overrideCabal super.SDL-image (drv: {
+  SDL-image = overrideCabal (drv: {
     # Prevent darwin-specific configuration code path being taken
     # which doesn't work with nixpkgs' SDL libraries
     postPatch = ''
@@ -220,18 +220,18 @@ self: super: ({
       # Work around SDL_main.h redefining main to SDL_main
       ./patches/SDL-image-darwin-hsc.patch
     ];
-  });
+  }) super.SDL-image;
 
   # Prevent darwin-specific configuration code path being taken which
   # doesn't work with nixpkgs' SDL libraries
-  SDL-mixer = overrideCabal super.SDL-mixer (drv: {
+  SDL-mixer = overrideCabal (drv: {
     postPatch = ''
       substituteInPlace configure --replace xDarwin noDarwinSpecialCasing
     '' + (drv.postPatch or "");
-  });
+  }) super.SDL-mixer;
 
   # Work around SDL_main.h redefining main to SDL_main
-  SDL-ttf = appendPatch super.SDL-ttf ./patches/SDL-ttf-darwin-hsc.patch;
+  SDL-ttf = appendPatch ./patches/SDL-ttf-darwin-hsc.patch super.SDL-ttf;
 
   # Disable a bunch of test suites that fail because of darwin's case insensitive
   # file system: When a test suite has a test suite file that has the same name
@@ -252,7 +252,7 @@ self: super: ({
   acid-state = dontCheck super.acid-state;
 
   # Otherwise impure gcc is used, which is Apple's weird wrapper
-  c2hsc = addTestToolDepends super.c2hsc [ pkgs.gcc ];
+  c2hsc = addTestToolDepends [ pkgs.gcc ] super.c2hsc;
 
 } // lib.optionalAttrs pkgs.stdenv.isAarch64 {  # aarch64-darwin
 
diff --git a/pkgs/development/haskell-modules/configuration-ghc-8.10.x.nix b/pkgs/development/haskell-modules/configuration-ghc-8.10.x.nix
index 4d0c3320894..d5523fd07cf 100644
--- a/pkgs/development/haskell-modules/configuration-ghc-8.10.x.nix
+++ b/pkgs/development/haskell-modules/configuration-ghc-8.10.x.nix
@@ -72,20 +72,20 @@ self: super: {
   shower = doJailbreak super.shower;
 
   # The shipped Setup.hs file is broken.
-  csv = overrideCabal super.csv (drv: { preCompileBuildDriver = "rm Setup.hs"; });
+  csv = overrideCabal (drv: { preCompileBuildDriver = "rm Setup.hs"; }) super.csv;
 
   # Apply patch from https://github.com/finnsson/template-helper/issues/12#issuecomment-611795375 to fix the build.
-  language-haskell-extract = appendPatch (doJailbreak super.language-haskell-extract) (pkgs.fetchpatch {
+  language-haskell-extract = appendPatch (pkgs.fetchpatch {
     name = "language-haskell-extract-0.2.4.patch";
     url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/e48738ee1be774507887a90a0d67ad1319456afc/patches/language-haskell-extract-0.2.4.patch?inline=false";
     sha256 = "0rgzrq0513nlc1vw7nw4km4bcwn4ivxcgi33jly4a7n3c1r32v1f";
-  });
+  }) (doJailbreak super.language-haskell-extract);
 
   # hnix 0.9.0 does not provide an executable for ghc < 8.10, so define completions here for now.
   hnix = generateOptparseApplicativeCompletion "hnix"
-    (overrideCabal super.hnix (drv: {
+    (overrideCabal (drv: {
       # executable is allowed for ghc >= 8.10 and needs repline
       executableHaskellDepends = drv.executableToolDepends or [] ++ [ self.repline ];
-    }));
+    }) super.hnix);
 
 }
diff --git a/pkgs/development/haskell-modules/configuration-ghc-8.6.x.nix b/pkgs/development/haskell-modules/configuration-ghc-8.6.x.nix
index 99b53b9f14f..72df46f393e 100644
--- a/pkgs/development/haskell-modules/configuration-ghc-8.6.x.nix
+++ b/pkgs/development/haskell-modules/configuration-ghc-8.6.x.nix
@@ -90,13 +90,13 @@ self: super: {
   haddock-library_1_7_0 = dontCheck super.haddock-library_1_7_0;
 
   # ghc versions prior to 8.8.x needs additional dependency to compile successfully.
-  ghc-lib-parser-ex = addBuildDepend super.ghc-lib-parser-ex self.ghc-lib-parser;
+  ghc-lib-parser-ex = addBuildDepend self.ghc-lib-parser super.ghc-lib-parser-ex;
 
   # This became a core library in ghc 8.10., so we don‘t have an "exception" attribute anymore.
   exceptions = super.exceptions_0_10_4;
 
   # Older compilers need the latest ghc-lib to build this package.
-  hls-hlint-plugin = addBuildDepend super.hls-hlint-plugin self.ghc-lib;
+  hls-hlint-plugin = addBuildDepend self.ghc-lib super.hls-hlint-plugin;
 
   # vector 0.12.2 indroduced doctest checks that don‘t work on older compilers
   vector = dontCheck super.vector;
diff --git a/pkgs/development/haskell-modules/configuration-ghc-8.8.x.nix b/pkgs/development/haskell-modules/configuration-ghc-8.8.x.nix
index 25d8e44b454..db7ae186b80 100644
--- a/pkgs/development/haskell-modules/configuration-ghc-8.8.x.nix
+++ b/pkgs/development/haskell-modules/configuration-ghc-8.8.x.nix
@@ -85,10 +85,10 @@ self: super: {
   vault = dontHaddock super.vault;
 
   # https://github.com/snapframework/snap-core/issues/288
-  snap-core = overrideCabal super.snap-core (drv: { prePatch = "substituteInPlace src/Snap/Internal/Core.hs --replace 'fail   = Fail.fail' ''"; });
+  snap-core = overrideCabal (drv: { prePatch = "substituteInPlace src/Snap/Internal/Core.hs --replace 'fail   = Fail.fail' ''"; }) super.snap-core;
 
   # Upstream ships a broken Setup.hs file.
-  csv = overrideCabal super.csv (drv: { prePatch = "rm Setup.hs"; });
+  csv = overrideCabal (drv: { prePatch = "rm Setup.hs"; }) super.csv;
 
   # https://github.com/kowainik/relude/issues/241
   relude = dontCheck super.relude;
@@ -120,10 +120,10 @@ self: super: {
 
   # ghc versions which don‘t match the ghc-lib-parser-ex version need the
   # additional dependency to compile successfully.
-  ghc-lib-parser-ex = addBuildDepend super.ghc-lib-parser-ex self.ghc-lib-parser;
+  ghc-lib-parser-ex = addBuildDepend self.ghc-lib-parser super.ghc-lib-parser-ex;
 
   # Older compilers need the latest ghc-lib to build this package.
-  hls-hlint-plugin = addBuildDepend super.hls-hlint-plugin self.ghc-lib;
+  hls-hlint-plugin = addBuildDepend self.ghc-lib super.hls-hlint-plugin;
 
   # vector 0.12.2 indroduced doctest checks that don‘t work on older compilers
   vector = dontCheck super.vector;
diff --git a/pkgs/development/haskell-modules/configuration-ghc-9.0.x.nix b/pkgs/development/haskell-modules/configuration-ghc-9.0.x.nix
index 6f7c794db21..4b0c0754bb8 100644
--- a/pkgs/development/haskell-modules/configuration-ghc-9.0.x.nix
+++ b/pkgs/development/haskell-modules/configuration-ghc-9.0.x.nix
@@ -55,10 +55,10 @@ self: super: {
   dec = doJailbreak super.dec;
   ed25519 = doJailbreak super.ed25519;
   hackage-security = doJailbreak super.hackage-security;
-  hashable = overrideCabal (doJailbreak (dontCheck super.hashable)) (drv: { postPatch = "sed -i -e 's,integer-gmp .*<1.1,integer-gmp < 2,' hashable.cabal"; });
+  hashable = overrideCabal (drv: { postPatch = "sed -i -e 's,integer-gmp .*<1.1,integer-gmp < 2,' hashable.cabal"; }) (doJailbreak (dontCheck super.hashable));
   hashable-time = doJailbreak super.hashable-time;
-  HTTP = overrideCabal (doJailbreak super.HTTP) (drv: { postPatch = "sed -i -e 's,! Socket,!Socket,' Network/TCP.hs"; });
-  integer-logarithms = overrideCabal (doJailbreak super.integer-logarithms) (drv: { postPatch = "sed -i -e 's,integer-gmp <1.1,integer-gmp < 2,' integer-logarithms.cabal"; });
+  HTTP = overrideCabal (drv: { postPatch = "sed -i -e 's,! Socket,!Socket,' Network/TCP.hs"; }) (doJailbreak super.HTTP);
+  integer-logarithms = overrideCabal (drv: { postPatch = "sed -i -e 's,integer-gmp <1.1,integer-gmp < 2,' integer-logarithms.cabal"; }) (doJailbreak super.integer-logarithms);
   lukko = doJailbreak super.lukko;
   parallel = doJailbreak super.parallel;
   primitive = doJailbreak (dontCheck super.primitive);
@@ -87,15 +87,15 @@ self: super: {
   generic-lens_2_2_0_0 = dontCheck super.generic-lens_2_2_0_0;
 
   # Apply patches from head.hackage.
-  alex = appendPatch (dontCheck super.alex) (pkgs.fetchpatch {
+  alex = appendPatch (pkgs.fetchpatch {
     url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/fe192e12b88b09499d4aff0e562713e820544bd6/patches/alex-3.2.6.patch";
     sha256 = "1rzs764a0nhx002v4fadbys98s6qblw4kx4g46galzjf5f7n2dn4";
-  });
+  }) (dontCheck super.alex);
   doctest = dontCheck (doJailbreak super.doctest_0_18_1);
-  language-haskell-extract = appendPatch (doJailbreak super.language-haskell-extract) (pkgs.fetchpatch {
+  language-haskell-extract = appendPatch (pkgs.fetchpatch {
     url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/master/patches/language-haskell-extract-0.2.4.patch";
     sha256 = "0rgzrq0513nlc1vw7nw4km4bcwn4ivxcgi33jly4a7n3c1r32v1f";
-  });
+  }) (doJailbreak super.language-haskell-extract);
 
   # The test suite depends on ChasingBottoms, which is broken with ghc-9.0.x.
   unordered-containers = dontCheck super.unordered-containers;
@@ -131,15 +131,15 @@ self: super: {
 
   # Will probably be needed for brittany support
   # https://github.com/lspitzner/czipwith/pull/2
-  #czipwith = appendPatch super.czipwith
+  #czipwith = appendPatch
   #    (pkgs.fetchpatch {
   #      url = "https://github.com/lspitzner/czipwith/commit/b6245884ae83e00dd2b5261762549b37390179f8.patch";
   #      sha256 = "08rpppdldsdwzb09fmn0j55l23pwyls2dyzziw3yjc1cm0j5vic5";
-  #    });
+  #    }) super.czipwith;
 
   # 2021-09-18: https://github.com/mokus0/th-extras/pull/8
   # Release is missing, but asked for in the above PR.
-  th-extras = overrideCabal super.th-extras (old: {
+  th-extras = overrideCabal (old: {
       version = assert old.version == "0.0.0.4"; "unstable-2021-09-18";
       src = pkgs.fetchFromGitHub  {
         owner = "mokus0";
@@ -148,22 +148,22 @@ self: super: {
         sha256 = "045f36yagrigrggvyb96zqmw8y42qjsllhhx2h20q25sk5h44xsd";
       };
       libraryHaskellDepends = old.libraryHaskellDepends ++ [self.th-abstraction];
-    });
+    }) super.th-extras;
 
   # 2021-09-18: GHC 9 compat release is missing
   # Issue: https://github.com/obsidiansystems/dependent-sum/issues/65
-  dependent-sum-template = dontCheck (appendPatch super.dependent-sum-template
+  dependent-sum-template = dontCheck (appendPatch
       (pkgs.fetchpatch {
         url = "https://github.com/obsidiansystems/dependent-sum/commit/8cf4c7fbc3bfa2be475a17bb7c94a1e1e9a830b5.patch";
         sha256 = "02wyy0ciicq2x8lw4xxz3x5i4a550mxfidhm2ihh60ni6am498ff";
         stripLen = 2;
         extraPrefix = "";
-      }));
+      }) super.dependent-sum-template);
 
   # 2021-09-18: cabal2nix does not detect the need for ghc-api-compat.
-  hiedb = overrideCabal super.hiedb (old: {
+  hiedb = overrideCabal (old: {
     libraryHaskellDepends = old.libraryHaskellDepends ++ [self.ghc-api-compat];
-  });
+  }) super.hiedb;
 
   # 2021-09-18: Need path >= 0.9.0 for ghc 9 compat
   path = self.path_0_9_0;
@@ -174,16 +174,7 @@ self: super: {
   hls-ormolu-plugin = doJailbreak super.hls-ormolu-plugin;
 
   # 2021-09-18: The following plugins don‘t work yet on ghc9.
-  haskell-language-server = appendConfigureFlags (super.haskell-language-server.override {
-    hls-tactics-plugin = null; # No upstream support, generic-lens-core fail
-    hls-splice-plugin = null; # No upstream support in hls 1.4.0, should be fixed in 1.5
-    hls-refine-imports-plugin = null; # same issue es splice-plugin
-    hls-class-plugin = null; # No upstream support
-
-    hls-fourmolu-plugin = null; # No upstream support, needs new fourmolu release
-    hls-stylish-haskell-plugin = null; # No upstream support
-    hls-brittany-plugin = null; # No upstream support, needs new brittany release
-  }) [
+  haskell-language-server = appendConfigureFlags [
     "-f-tactic"
     "-f-splice"
     "-f-refineimports"
@@ -192,5 +183,14 @@ self: super: {
     "-f-fourmolu"
     "-f-brittany"
     "-f-stylishhaskell"
-  ];
+  ] (super.haskell-language-server.override {
+    hls-tactics-plugin = null; # No upstream support, generic-lens-core fail
+    hls-splice-plugin = null; # No upstream support in hls 1.4.0, should be fixed in 1.5
+    hls-refine-imports-plugin = null; # same issue es splice-plugin
+    hls-class-plugin = null; # No upstream support
+
+    hls-fourmolu-plugin = null; # No upstream support, needs new fourmolu release
+    hls-stylish-haskell-plugin = null; # No upstream support
+    hls-brittany-plugin = null; # No upstream support, needs new brittany release
+  });
 }
diff --git a/pkgs/development/haskell-modules/configuration-ghc-9.2.x.nix b/pkgs/development/haskell-modules/configuration-ghc-9.2.x.nix
index 8a09f9997ef..127dd4d7652 100644
--- a/pkgs/development/haskell-modules/configuration-ghc-9.2.x.nix
+++ b/pkgs/development/haskell-modules/configuration-ghc-9.2.x.nix
@@ -44,50 +44,50 @@ self: super: {
   xhtml = null;
 
   # Workaround for https://gitlab.haskell.org/ghc/ghc/-/issues/20594
-  tf-random = overrideCabal super.tf-random {
+  tf-random = overrideCabal {
     doHaddock = !pkgs.stdenv.isAarch64;
-  };
+  } super.tf-random;
 
-  aeson = appendPatch (doJailbreak super.aeson) (pkgs.fetchpatch {
+  aeson = appendPatch (pkgs.fetchpatch {
     url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/dfd024c9a336c752288ec35879017a43bd7e85a0/patches/aeson-1.5.6.0.patch";
     sha256 = "07rk7f0lhgilxvbg2grpl1p5x25wjf9m7a0wqmi2jr0q61p9a0nl";
     # The revision information is newer than that included in the patch
     excludes = ["*.cabal"];
-  });
+  }) (doJailbreak super.aeson);
 
   # Tests use Data.Semigroup.Option
   aeson_2_0_1_0 = dontCheck (doJailbreak super.aeson_2_0_1_0);
 
-  basement = overrideCabal (appendPatch super.basement (pkgs.fetchpatch {
-    url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/dfd024c9a336c752288ec35879017a43bd7e85a0/patches/basement-0.0.12.patch";
-    sha256 = "0c8n2krz827cv87p3vb1vpl3v0k255aysjx9lq44gz3z1dhxd64z";
-  })) (drv: {
+  basement = overrideCabal (drv: {
     # This is inside a conditional block so `doJailbreak` doesn't work
     postPatch = "sed -i -e 's,<4.16,<4.17,' basement.cabal";
-  });
+  }) (appendPatch (pkgs.fetchpatch {
+    url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/dfd024c9a336c752288ec35879017a43bd7e85a0/patches/basement-0.0.12.patch";
+    sha256 = "0c8n2krz827cv87p3vb1vpl3v0k255aysjx9lq44gz3z1dhxd64z";
+  }) super.basement);
 
-  cereal = appendPatch (doJailbreak super.cereal) (pkgs.fetchpatch {
+  cereal = appendPatch (pkgs.fetchpatch {
     url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/dfd024c9a336c752288ec35879017a43bd7e85a0/patches/cereal-0.5.8.1.patch";
     sha256 = "03v4nxwz9y6viaa8anxcmp4zdf2clczv4pf9fqq6lnpplpz5i128";
-  });
+  }) (doJailbreak super.cereal);
 
   # Tests fail because of typechecking changes
   conduit = dontCheck super.conduit;
 
-  cryptonite = appendPatch super.cryptonite (pkgs.fetchpatch {
+  cryptonite = appendPatch (pkgs.fetchpatch {
     url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/dfd024c9a336c752288ec35879017a43bd7e85a0/patches/cryptonite-0.29.patch";
     sha256 = "1g48lrmqgd88hqvfq3klz7lsrpwrir2v1931myrhh6dy0d9pqj09";
-  });
+  }) super.cryptonite;
 
   # cabal-install needs more recent versions of Cabal
   cabal-install = (doJailbreak super.cabal-install).overrideScope (self: super: {
     Cabal = self.Cabal_3_6_2_0;
   });
 
-  doctest = appendPatch (dontCheck (doJailbreak super.doctest_0_18_1)) (pkgs.fetchpatch {
+  doctest = appendPatch (pkgs.fetchpatch {
     url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/dfd024c9a336c752288ec35879017a43bd7e85a0/patches/doctest-0.18.1.patch";
     sha256 = "030kdsk0fg08cgdcjpyv6z8ym1vkkrbd34aacs91y5hqzc9g79y1";
-  });
+  }) (dontCheck (doJailbreak super.doctest_0_18_1));
 
   # Tests fail in GHC 9.2
   extra = dontCheck super.extra;
@@ -103,7 +103,7 @@ self: super: {
   binary-orphans = super.binary-orphans_1_0_2;
   ChasingBottoms = doJailbreak super.ChasingBottoms;
   constraints = doJailbreak super.constraints;
-  cpphs = overrideCabal super.cpphs (drv: { postPatch = "sed -i -e 's,time >=1.5 && <1.11,time >=1.5 \\&\\& <1.12,' cpphs.cabal";});
+  cpphs = overrideCabal (drv: { postPatch = "sed -i -e 's,time >=1.5 && <1.11,time >=1.5 \\&\\& <1.12,' cpphs.cabal";}) super.cpphs;
   cryptohash-md5 = doJailbreak super.cryptohash-md5;
   cryptohash-sha1 = doJailbreak super.cryptohash-sha1;
   data-fix = doJailbreak super.data-fix;
@@ -117,8 +117,8 @@ self: super: {
   hashable = super.hashable_1_4_0_0;
   hashable-time = doJailbreak super.hashable-time;
   hedgehog = doJailbreak super.hedgehog;
-  HTTP = overrideCabal (doJailbreak super.HTTP) (drv: { postPatch = "sed -i -e 's,! Socket,!Socket,' Network/TCP.hs"; });
-  integer-logarithms = overrideCabal (doJailbreak super.integer-logarithms) (drv: { postPatch = "sed -i -e 's, <1.1, <1.3,' integer-logarithms.cabal"; });
+  HTTP = overrideCabal (drv: { postPatch = "sed -i -e 's,! Socket,!Socket,' Network/TCP.hs"; }) (doJailbreak super.HTTP);
+  integer-logarithms = overrideCabal (drv: { postPatch = "sed -i -e 's, <1.1, <1.3,' integer-logarithms.cabal"; }) (doJailbreak super.integer-logarithms);
   indexed-traversable = doJailbreak super.indexed-traversable;
   indexed-traversable-instances = doJailbreak super.indexed-traversable-instances;
   lifted-async = doJailbreak super.lifted-async;
@@ -126,7 +126,7 @@ self: super: {
   network = super.network_3_1_2_5;
   OneTuple = super.OneTuple_0_3_1;
   parallel = doJailbreak super.parallel;
-  polyparse = overrideCabal (doJailbreak super.polyparse) (drv: { postPatch = "sed -i -e 's, <0.11, <0.12,' polyparse.cabal"; });
+  polyparse = overrideCabal (drv: { postPatch = "sed -i -e 's, <0.11, <0.12,' polyparse.cabal"; }) (doJailbreak super.polyparse);
   primitive = doJailbreak super.primitive;
   quickcheck-instances = super.quickcheck-instances_0_3_26_1;
   regex-posix = doJailbreak super.regex-posix;
@@ -151,45 +151,45 @@ self: super: {
   witherable = doJailbreak super.witherable;
   zlib = doJailbreak super.zlib;
 
-  hpack = overrideCabal (doJailbreak super.hpack) (drv: {
+  hpack = overrideCabal (drv: {
     # Cabal 3.6 seems to preserve comments when reading, which makes this test fail
     # 2021-10-10: 9.2.1 is not yet supported (also no issue)
     testFlags = [
       "--skip=/Hpack/renderCabalFile/is inverse to readCabalFile/"
     ] ++ drv.testFlags or [];
-  });
+  }) (doJailbreak super.hpack);
 
   # Patch for TH code from head.hackage
-  vector-th-unbox = appendPatch (doJailbreak super.vector-th-unbox) (pkgs.fetchpatch {
+  vector-th-unbox = appendPatch (pkgs.fetchpatch {
     url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/dfd024c9a336c752288ec35879017a43bd7e85a0/patches/vector-th-unbox-0.2.1.9.patch";
     sha256 = "02bvvy3hx3cf4y4dr64zl5pjvq8giwk4286j5g1n6k8ikyn2403p";
-  });
+  }) (doJailbreak super.vector-th-unbox);
 
   # Patch for TH code from head.hackage
-  invariant = appendPatch (doJailbreak super.invariant) (pkgs.fetchpatch {
+  invariant = appendPatch (pkgs.fetchpatch {
     url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/dfd024c9a336c752288ec35879017a43bd7e85a0/patches/invariant-0.5.4.patch";
     sha256 = "17gg8ck4r6qmlbcbpbnqzksgf5q7i891zs6axfzhas6ajncylxvc";
-  });
+  }) (doJailbreak super.invariant);
 
   # base 4.15 support from head.hackage
-  lens = appendPatch (doJailbreak super.lens_5_0_1) (pkgs.fetchpatch {
+  lens = appendPatch (pkgs.fetchpatch {
     url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/dfd024c9a336c752288ec35879017a43bd7e85a0/patches/lens-5.0.1.patch";
     sha256 = "1s8qqg7ymvv94dnfnr1ragx91chh9y7ydc4jx25zn361wbn00pv7";
-  });
+  }) (doJailbreak super.lens_5_0_1);
 
   # Syntax error in tests fixed in https://github.com/simonmar/alex/commit/84b29475e057ef744f32a94bc0d3954b84160760
   alex = dontCheck super.alex;
 
   # Apply patches from head.hackage.
-  language-haskell-extract = appendPatch (doJailbreak super.language-haskell-extract) (pkgs.fetchpatch {
+  language-haskell-extract = appendPatch (pkgs.fetchpatch {
     url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/dfd024c9a336c752288ec35879017a43bd7e85a0/patches/language-haskell-extract-0.2.4.patch";
     sha256 = "0w4y3v69nd3yafpml4gr23l94bdhbmx8xky48a59lckmz5x9fgxv";
-  });
+  }) (doJailbreak super.language-haskell-extract);
 
-  haskell-src-meta = appendPatch (doJailbreak super.haskell-src-meta) (pkgs.fetchpatch {
+  haskell-src-meta = appendPatch (pkgs.fetchpatch {
     url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/dfd024c9a336c752288ec35879017a43bd7e85a0/patches/haskell-src-meta-0.8.7.patch";
     sha256 = "013k8hpxac226j47cdzgdf9a1j91kmm0cvv7n8zwlajbj3y9bzjp";
-  });
+  }) (doJailbreak super.haskell-src-meta);
 
   # Tests depend on `parseTime` which is no longer available
   hourglass = dontCheck super.hourglass;
@@ -199,10 +199,10 @@ self: super: {
   random = dontCheck super.random_1_2_1;
 
   # 0.16.0 introduced support for GHC 9.0.x, stackage has 0.15.0
-  memory = appendPatch super.memory_0_16_0 (pkgs.fetchpatch {
+  memory = appendPatch (pkgs.fetchpatch {
     url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/dfd024c9a336c752288ec35879017a43bd7e85a0/patches/memory-0.16.0.patch";
     sha256 = "1kjganx729a6xfgfnrb3z7q6mvnidl042zrsd9n5n5a3i76nl5nl";
-  });
+  }) super.memory_0_16_0;
 
   # GHC 9.0.x doesn't like `import Spec (main)` in Main.hs
   # https://github.com/snoyberg/mono-traversable/issues/192
@@ -213,12 +213,12 @@ self: super: {
   retry = dontCheck super.retry;
 
   # Upper bound on `hashable` is too restrictive
-  semigroupoids = overrideCabal super.semigroupoids (drv: { postPatch = "sed -i -e 's,hashable >= 1.2.7.0  && < 1.4,hashable >= 1.2.7.0  \\&\\& < 1.5,' semigroupoids.cabal";});
+  semigroupoids = overrideCabal (drv: { postPatch = "sed -i -e 's,hashable >= 1.2.7.0  && < 1.4,hashable >= 1.2.7.0  \\&\\& < 1.5,' semigroupoids.cabal";}) super.semigroupoids;
 
-  streaming-commons = appendPatch super.streaming-commons (pkgs.fetchpatch {
+  streaming-commons = appendPatch (pkgs.fetchpatch {
     url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/dfd024c9a336c752288ec35879017a43bd7e85a0/patches/streaming-commons-0.2.2.1.patch";
     sha256 = "04wi1jskr3j8ayh88kkx4irvhhgz0i7aj6fblzijy0fygikvidpy";
-  });
+  }) super.streaming-commons;
 
   # Tests have a circular dependency on quickcheck-instances
   text-short = dontCheck super.text-short_0_1_4;
diff --git a/pkgs/development/haskell-modules/configuration-ghc-head.nix b/pkgs/development/haskell-modules/configuration-ghc-head.nix
index ca455a7c892..562a8fb44ba 100644
--- a/pkgs/development/haskell-modules/configuration-ghc-head.nix
+++ b/pkgs/development/haskell-modules/configuration-ghc-head.nix
@@ -75,6 +75,6 @@ self: super: {
   stack = doJailbreak super.stack;
 
   # Fix build with ghc 8.6.x.
-  git-annex = appendPatch super.git-annex ./patches/git-annex-fix-ghc-8.6.x-build.patch;
+  git-annex = appendPatch ./patches/git-annex-fix-ghc-8.6.x-build.patch super.git-annex;
 
 }
diff --git a/pkgs/development/haskell-modules/configuration-ghcjs.nix b/pkgs/development/haskell-modules/configuration-ghcjs.nix
index 953695e7b6c..87f83182ea0 100644
--- a/pkgs/development/haskell-modules/configuration-ghcjs.nix
+++ b/pkgs/development/haskell-modules/configuration-ghcjs.nix
@@ -38,17 +38,17 @@ self: super:
   # doctest doesn't work on ghcjs, but sometimes dontCheck doesn't seem to get rid of the dependency
   doctest = pkgs.lib.warn "ignoring dependency on doctest" null;
 
-  ghcjs-dom = overrideCabal super.ghcjs-dom (drv: {
+  ghcjs-dom = overrideCabal (drv: {
     libraryHaskellDepends = with self; [
       ghcjs-base ghcjs-dom-jsffi text transformers
     ];
     configureFlags = [ "-fjsffi" "-f-webkit" ];
-  });
+  }) super.ghcjs-dom;
 
-  ghcjs-dom-jsffi = overrideCabal super.ghcjs-dom-jsffi (drv: {
+  ghcjs-dom-jsffi = overrideCabal (drv: {
     libraryHaskellDepends = (drv.libraryHaskellDepends or []) ++ [ self.ghcjs-base self.text ];
     broken = false;
-  });
+  }) super.ghcjs-dom-jsffi;
 
   # https://github.com/Deewiant/glob/issues/39
   Glob = dontCheck super.Glob;
@@ -59,9 +59,9 @@ self: super:
   # uses doctest
   http-types = dontCheck super.http-types;
 
-  jsaddle = overrideCabal super.jsaddle (drv: {
+  jsaddle = overrideCabal (drv: {
     libraryHaskellDepends = (drv.libraryHaskellDepends or []) ++ [ self.ghcjs-base ];
-  });
+  }) super.jsaddle;
 
   # Tests hang, possibly some issue with tasty and race(async) usage in the nonTerminating tests
   logict = dontCheck super.logict;
@@ -74,13 +74,13 @@ self: super:
   # Terminal test not supported on ghcjs
   QuickCheck = dontCheck super.QuickCheck;
 
-  reflex = overrideCabal super.reflex (drv: {
+  reflex = overrideCabal (drv: {
     libraryHaskellDepends = (drv.libraryHaskellDepends or []) ++ [ self.ghcjs-base ];
-  });
+  }) super.reflex;
 
-  reflex-dom = overrideCabal super.reflex-dom (drv: {
+  reflex-dom = overrideCabal (drv: {
     libraryHaskellDepends = removeLibraryHaskellDepends ["jsaddle-webkit2gtk"] (drv.libraryHaskellDepends or []);
-  });
+  }) super.reflex-dom;
 
   # https://github.com/dreixel/syb/issues/21
   syb = dontCheck super.syb;
@@ -101,6 +101,9 @@ self: super:
   # still present here https://github.com/glguy/th-abstraction/issues/53
   th-abstraction = dontCheck super.th-abstraction;
 
+  # https://github.com/haskell/vector/issues/410
+  vector = appendPatch super.vector (../compilers/ghcjs/patches/vector-ghcjs-storable-set.patch);
+
   # Need hedgehog for tests, which fails to compile due to dep on concurrent-output
   zenc = dontCheck super.zenc;
 }
diff --git a/pkgs/development/haskell-modules/configuration-nix.nix b/pkgs/development/haskell-modules/configuration-nix.nix
index 5fc968ccdde..2eaf820a3aa 100644
--- a/pkgs/development/haskell-modules/configuration-nix.nix
+++ b/pkgs/development/haskell-modules/configuration-nix.nix
@@ -43,10 +43,10 @@ with haskellLib;
 self: super: builtins.intersectAttrs super {
 
   # Apply NixOS-specific patches.
-  ghc-paths = appendPatch super.ghc-paths ./patches/ghc-paths-nix.patch;
+  ghc-paths = appendPatch ./patches/ghc-paths-nix.patch super.ghc-paths;
 
   # fix errors caused by hardening flags
-  epanet-haskell = disableHardening super.epanet-haskell ["format"];
+  epanet-haskell = disableHardening ["format"] super.epanet-haskell;
 
   # Link the proper version.
   zeromq4-haskell = super.zeromq4-haskell.override { zeromq = pkgs.zeromq4; };
@@ -56,7 +56,7 @@ self: super: builtins.intersectAttrs super {
   mysql = dontCheck super.mysql;
 
   # CUDA needs help finding the SDK headers and libraries.
-  cuda = overrideCabal super.cuda (drv: {
+  cuda = overrideCabal (drv: {
     extraLibraries = (drv.extraLibraries or []) ++ [pkgs.linuxPackages.nvidia_x11];
     configureFlags = (drv.configureFlags or []) ++ [
       "--extra-lib-dirs=${pkgs.cudatoolkit.lib}/lib"
@@ -65,84 +65,84 @@ self: super: builtins.intersectAttrs super {
     preConfigure = ''
       export CUDA_PATH=${pkgs.cudatoolkit}
     '';
-  });
+  }) super.cuda;
 
-  nvvm = overrideCabal super.nvvm (drv: {
+  nvvm = overrideCabal (drv: {
     preConfigure = ''
       export CUDA_PATH=${pkgs.cudatoolkit}
     '';
-  });
+  }) super.nvvm;
 
-  cufft = overrideCabal super.cufft (drv: {
+  cufft = overrideCabal (drv: {
     preConfigure = ''
       export CUDA_PATH=${pkgs.cudatoolkit}
     '';
-  });
+  }) super.cufft;
 
   # jni needs help finding libjvm.so because it's in a weird location.
-  jni = overrideCabal super.jni (drv: {
+  jni = overrideCabal (drv: {
     preConfigure = ''
       local libdir=( "${pkgs.jdk}/lib/openjdk/jre/lib/"*"/server" )
       configureFlags+=" --extra-lib-dir=''${libdir[0]}"
     '';
-  });
+  }) super.jni;
 
   # The package doesn't know about the AL include hierarchy.
   # https://github.com/phaazon/al/issues/1
-  al = appendConfigureFlag super.al "--extra-include-dirs=${pkgs.openal}/include/AL";
+  al = appendConfigureFlag "--extra-include-dirs=${pkgs.openal}/include/AL" super.al;
 
   # Won't find it's header files without help.
-  sfml-audio = appendConfigureFlag super.sfml-audio "--extra-include-dirs=${pkgs.openal}/include/AL";
+  sfml-audio = appendConfigureFlag "--extra-include-dirs=${pkgs.openal}/include/AL" super.sfml-audio;
 
   # avoid compiling twice by providing executable as a separate output (with small closure size)
   niv = enableSeparateBinOutput super.niv;
   ormolu = enableSeparateBinOutput super.ormolu;
   ghcid = enableSeparateBinOutput super.ghcid;
 
-  hzk = overrideCabal super.hzk (drv: {
+  hzk = overrideCabal (drv: {
     preConfigure = "sed -i -e /include-dirs/d hzk.cabal";
     configureFlags = [ "--extra-include-dirs=${pkgs.zookeeper_mt}/include/zookeeper" ];
-  });
+  }) super.hzk;
 
-  haskakafka = overrideCabal super.haskakafka (drv: {
+  haskakafka = overrideCabal (drv: {
     preConfigure = "sed -i -e /extra-lib-dirs/d -e /include-dirs/d haskakafka.cabal";
     configureFlags = [ "--extra-include-dirs=${pkgs.rdkafka}/include/librdkafka" ];
-  });
+  }) super.haskakafka;
 
   # library has hard coded directories that need to be removed. Reported upstream here https://github.com/haskell-works/hw-kafka-client/issues/32
-  hw-kafka-client = dontCheck (overrideCabal super.hw-kafka-client (drv: {
+  hw-kafka-client = dontCheck (overrideCabal (drv: {
     preConfigure = "sed -i -e /extra-lib-dirs/d -e /include-dirs/d -e /librdkafka/d hw-kafka-client.cabal";
     configureFlags = [ "--extra-include-dirs=${pkgs.rdkafka}/include/librdkafka" ];
-  }));
+  }) super.hw-kafka-client);
 
   # Foreign dependency name clashes with another Haskell package.
   libarchive-conduit = super.libarchive-conduit.override { archive = pkgs.libarchive; };
 
   # Heist's test suite requires system pandoc
-  heist = overrideCabal super.heist (drv: {
+  heist = overrideCabal (drv: {
     testToolDepends = [pkgs.pandoc];
-  });
+  }) super.heist;
 
   # https://github.com/NixOS/cabal2nix/issues/136 and https://github.com/NixOS/cabal2nix/issues/216
-  gio = disableHardening (addPkgconfigDepend (addBuildTool super.gio self.buildHaskellPackages.gtk2hs-buildtools) pkgs.glib) ["fortify"];
-  glib = disableHardening (addPkgconfigDepend (addBuildTool super.glib self.buildHaskellPackages.gtk2hs-buildtools) pkgs.glib) ["fortify"];
-  gtk3 = disableHardening (super.gtk3.override { inherit (pkgs) gtk3; }) ["fortify"];
-  gtk = let gtk1 = addBuildTool super.gtk self.buildHaskellPackages.gtk2hs-buildtools;
-            gtk2 = addPkgconfigDepend gtk1 pkgs.gtk2;
-            gtk3 = disableHardening gtk1 ["fortify"];
-            gtk4 = if pkgs.stdenv.isDarwin then appendConfigureFlag gtk3 "-fhave-quartz-gtk" else gtk4;
+  gio = disableHardening ["fortify"] (addPkgconfigDepend pkgs.glib (addBuildTool self.buildHaskellPackages.gtk2hs-buildtools super.gio));
+  glib = disableHardening ["fortify"] (addPkgconfigDepend pkgs.glib (addBuildTool self.buildHaskellPackages.gtk2hs-buildtools super.glib));
+  gtk3 = disableHardening ["fortify"] (super.gtk3.override { inherit (pkgs) gtk3; });
+  gtk = let gtk1 = addBuildTool self.buildHaskellPackages.gtk2hs-buildtools super.gtk;
+            gtk2 = addPkgconfigDepend pkgs.gtk2 gtk1;
+            gtk3 = disableHardening ["fortify"] gtk1;
+            gtk4 = if pkgs.stdenv.isDarwin then appendConfigureFlag "-fhave-quartz-gtk" gtk3 else gtk4;
         in gtk3;
-  gtksourceview2 = addPkgconfigDepend super.gtksourceview2 pkgs.gtk2;
-  gtk-traymanager = addPkgconfigDepend super.gtk-traymanager pkgs.gtk3;
+  gtksourceview2 = addPkgconfigDepend pkgs.gtk2 super.gtksourceview2;
+  gtk-traymanager = addPkgconfigDepend pkgs.gtk3 super.gtk-traymanager;
 
   # Add necessary reference to gtk3 package
-  gi-dbusmenugtk3 = addPkgconfigDepend super.gi-dbusmenugtk3 pkgs.gtk3;
+  gi-dbusmenugtk3 = addPkgconfigDepend pkgs.gtk3 super.gi-dbusmenugtk3;
 
-  hs-mesos = overrideCabal super.hs-mesos (drv: {
+  hs-mesos = overrideCabal (drv: {
     # Pass _only_ mesos; the correct protobuf is propagated.
     extraLibraries = [ pkgs.mesos ];
     preConfigure = "sed -i -e /extra-lib-dirs/d -e 's|, /usr/include, /usr/local/include/mesos||' hs-mesos.cabal";
-  });
+  }) super.hs-mesos;
 
   # These packages try to access the network.
   amqp = dontCheck super.amqp;
@@ -156,7 +156,7 @@ self: super: builtins.intersectAttrs super {
   hadoop-rpc = dontCheck super.hadoop-rpc;              # http://hydra.cryp.to/build/527461/nixlog/2/raw
   hasql = dontCheck super.hasql;                        # http://hydra.cryp.to/build/502489/nixlog/4/raw
   hasql-transaction = dontCheck super.hasql-transaction; # wants to connect to postgresql
-  hjsonschema = overrideCabal super.hjsonschema (drv: { testTarget = "local"; });
+  hjsonschema = overrideCabal (drv: { testTarget = "local"; }) super.hjsonschema;
   marmalade-upload = dontCheck super.marmalade-upload;  # http://hydra.cryp.to/build/501904/nixlog/1/raw
   mongoDB = dontCheck super.mongoDB;
   network-transport-tcp = dontCheck super.network-transport-tcp;
@@ -203,10 +203,10 @@ self: super: builtins.intersectAttrs super {
   mattermost-api = dontCheck super.mattermost-api;
 
   # Expect to find sendmail(1) in $PATH.
-  mime-mail = appendConfigureFlag super.mime-mail "--ghc-option=-DMIME_MAIL_SENDMAIL_PATH=\"sendmail\"";
+  mime-mail = appendConfigureFlag "--ghc-option=-DMIME_MAIL_SENDMAIL_PATH=\"sendmail\"" super.mime-mail;
 
   # Help the test suite find system timezone data.
-  tz = overrideCabal super.tz (drv: {
+  tz = overrideCabal (drv: {
     preConfigure = "export TZDIR=${pkgs.tzdata}/share/zoneinfo";
     patches = [
       # Fix tests failing with libSystem, musl etc. due to a lack of
@@ -218,37 +218,37 @@ self: super: builtins.intersectAttrs super {
         sha256 = "1f53w8k1vpy39hzalyykpvm946ykkarj2714w988jdp4c2c4l4cf";
       })
     ] ++ (drv.patches or []);
-  });
+  }) super.tz;
 
   # Nix-specific workaround
-  xmonad = appendPatch (dontCheck super.xmonad) ./patches/xmonad-nix.patch;
+  xmonad = appendPatch ./patches/xmonad-nix.patch (dontCheck super.xmonad);
 
   # wxc supports wxGTX >= 3.0, but our current default version points to 2.8.
   # http://hydra.cryp.to/build/1331287/log/raw
-  wxc = (addBuildDepend super.wxc self.split).override { wxGTK = pkgs.wxGTK30; };
+  wxc = (addBuildDepend self.split super.wxc).override { wxGTK = pkgs.wxGTK30; };
   wxcore = super.wxcore.override { wxGTK = pkgs.wxGTK30; };
 
   # Test suite wants to connect to $DISPLAY.
   bindings-GLFW = dontCheck super.bindings-GLFW;
   gi-gtk-declarative = dontCheck super.gi-gtk-declarative;
   gi-gtk-declarative-app-simple = dontCheck super.gi-gtk-declarative-app-simple;
-  hsqml = dontCheck (addExtraLibraries (super.hsqml.override { qt5 = pkgs.qt5Full; }) [pkgs.libGLU pkgs.libGL]);
+  hsqml = dontCheck (addExtraLibraries [pkgs.libGLU pkgs.libGL] (super.hsqml.override { qt5 = pkgs.qt5Full; }));
   monomer = dontCheck super.monomer;
 
   # Wants to check against a real DB, Needs freetds
-  odbc = dontCheck (addExtraLibraries super.odbc [ pkgs.freetds ]);
+  odbc = dontCheck (addExtraLibraries [ pkgs.freetds ] super.odbc);
 
   # Tests attempt to use NPM to install from the network into
   # /homeless-shelter. Disabled.
   purescript = dontCheck super.purescript;
 
   # Hardcoded include path
-  poppler = overrideCabal super.poppler (drv: {
+  poppler = overrideCabal (drv: {
     postPatch = ''
       sed -i -e 's,glib/poppler.h,poppler.h,' poppler.cabal
       sed -i -e 's,glib/poppler.h,poppler.h,' Graphics/UI/Gtk/Poppler/Structs.hsc
     '';
-  });
+  }) super.poppler;
 
   # Uses OpenGL in testing
   caramia = dontCheck super.caramia;
@@ -257,10 +257,10 @@ self: super: builtins.intersectAttrs super {
   llvm-hs = super.llvm-hs.override { llvm-config = pkgs.llvm_9; };
 
   # Needs help finding LLVM.
-  spaceprobe = addBuildTool super.spaceprobe self.buildHaskellPackages.llvmPackages.llvm;
+  spaceprobe = addBuildTool self.buildHaskellPackages.llvmPackages.llvm super.spaceprobe;
 
   # Tries to run GUI in tests
-  leksah = dontCheck (overrideCabal super.leksah (drv: {
+  leksah = dontCheck (overrideCabal (drv: {
     executableSystemDepends = (drv.executableSystemDepends or []) ++ (with pkgs; [
       gnome.adwaita-icon-theme # Fix error: Icon 'window-close' not present in theme ...
       wrapGAppsHook           # Fix error: GLib-GIO-ERROR **: No GSettings schemas are installed on the system
@@ -272,12 +272,10 @@ self: super: builtins.intersectAttrs super {
         substituteInPlace "$f" --replace "\"leksah-server\"" "\"${self.leksah-server}/bin/leksah-server\""
       done
     '';
-  }));
+  }) super.leksah);
 
   dyre =
     appendPatch
-      # dyre's tests appear to be trying to directly call GHC.
-      (dontCheck super.dyre)
       # Dyre needs special support for reading the NIX_GHC env var.  This is
       # available upstream in https://github.com/willdonnelly/dyre/pull/43, but
       # hasn't been released to Hackage as of dyre-0.9.1.  Likely included in
@@ -285,46 +283,48 @@ self: super: builtins.intersectAttrs super {
       (pkgs.fetchpatch {
         url = "https://github.com/willdonnelly/dyre/commit/c7f29d321aae343d6b314f058812dffcba9d7133.patch";
         sha256 = "10m22k35bi6cci798vjpy4c2l08lq5nmmj24iwp0aflvmjdgscdb";
-      });
+      })
+      # dyre's tests appear to be trying to directly call GHC.
+      (dontCheck super.dyre);
 
   # https://github.com/edwinb/EpiVM/issues/13
   # https://github.com/edwinb/EpiVM/issues/14
-  epic = addExtraLibraries (addBuildTool super.epic self.buildHaskellPackages.happy) [pkgs.boehmgc pkgs.gmp];
+  epic = addExtraLibraries [pkgs.boehmgc pkgs.gmp] (addBuildTool self.buildHaskellPackages.happy super.epic);
 
   # https://github.com/ekmett/wl-pprint-terminfo/issues/7
-  wl-pprint-terminfo = addExtraLibrary super.wl-pprint-terminfo pkgs.ncurses;
+  wl-pprint-terminfo = addExtraLibrary pkgs.ncurses super.wl-pprint-terminfo;
 
   # https://github.com/bos/pcap/issues/5
-  pcap = addExtraLibrary super.pcap pkgs.libpcap;
+  pcap = addExtraLibrary pkgs.libpcap super.pcap;
 
   # https://github.com/NixOS/nixpkgs/issues/53336
-  greenclip = addExtraLibrary super.greenclip pkgs.xorg.libXdmcp;
+  greenclip = addExtraLibrary pkgs.xorg.libXdmcp super.greenclip;
 
   # The cabal files for these libraries do not list the required system dependencies.
-  miniball = overrideCabal super.miniball (drv: {
+  miniball = overrideCabal (drv: {
     librarySystemDepends = [ pkgs.miniball ];
-  });
-  SDL-image = overrideCabal super.SDL-image (drv: {
+  }) super.miniball;
+  SDL-image = overrideCabal (drv: {
     librarySystemDepends = [ pkgs.SDL pkgs.SDL_image ] ++ drv.librarySystemDepends or [];
-  });
-  SDL-ttf = overrideCabal super.SDL-ttf (drv: {
+  }) super.SDL-image;
+  SDL-ttf = overrideCabal (drv: {
     librarySystemDepends = [ pkgs.SDL pkgs.SDL_ttf ];
-  });
-  SDL-mixer = overrideCabal super.SDL-mixer (drv: {
+  }) super.SDL-ttf;
+  SDL-mixer = overrideCabal (drv: {
     librarySystemDepends = [ pkgs.SDL pkgs.SDL_mixer ];
-  });
-  SDL-gfx = overrideCabal super.SDL-gfx (drv: {
+  }) super.SDL-mixer;
+  SDL-gfx = overrideCabal (drv: {
     librarySystemDepends = [ pkgs.SDL pkgs.SDL_gfx ];
-  });
-  SDL-mpeg = overrideCabal super.SDL-mpeg (drv: {
+  }) super.SDL-gfx;
+  SDL-mpeg = overrideCabal (drv: {
     configureFlags = (drv.configureFlags or []) ++ [
       "--extra-lib-dirs=${pkgs.smpeg}/lib"
       "--extra-include-dirs=${pkgs.smpeg}/include/smpeg"
     ];
-  });
+  }) super.SDL-mpeg;
 
   # https://github.com/ivanperez-keera/hcwiid/pull/4
-  hcwiid = overrideCabal super.hcwiid (drv: {
+  hcwiid = overrideCabal (drv: {
     configureFlags = (drv.configureFlags or []) ++ [
       "--extra-lib-dirs=${pkgs.bluez.out}/lib"
       "--extra-lib-dirs=${pkgs.cwiid}/lib"
@@ -332,16 +332,16 @@ self: super: builtins.intersectAttrs super {
       "--extra-include-dirs=${pkgs.bluez.dev}/include"
     ];
     prePatch = '' sed -i -e "/Extra-Lib-Dirs/d" -e "/Include-Dirs/d" "hcwiid.cabal" '';
-  });
+  }) super.hcwiid;
 
   # cabal2nix doesn't pick up some of the dependencies.
   ginsu = let
-    g = addBuildDepend super.ginsu pkgs.perl;
-    g' = overrideCabal g (drv: {
+    g = addBuildDepend pkgs.perl super.ginsu;
+    g' = overrideCabal (drv: {
       executableSystemDepends = (drv.executableSystemDepends or []) ++ [
         pkgs.ncurses
       ];
-    });
+    }) g;
   in g';
 
   # Tests require `docker` command in PATH
@@ -349,23 +349,23 @@ self: super: builtins.intersectAttrs super {
   docker = dontCheck super.docker;
 
   # https://github.com/deech/fltkhs/issues/16
-  fltkhs = overrideCabal super.fltkhs (drv: {
+  fltkhs = overrideCabal (drv: {
     libraryToolDepends = (drv.libraryToolDepends or []) ++ [pkgs.buildPackages.autoconf];
     librarySystemDepends = (drv.librarySystemDepends or []) ++ [pkgs.fltk13 pkgs.libGL pkgs.libjpeg];
-  });
+  }) super.fltkhs;
 
   # https://github.com/skogsbaer/hscurses/pull/26
-  hscurses = overrideCabal super.hscurses (drv: {
+  hscurses = overrideCabal (drv: {
     librarySystemDepends = (drv.librarySystemDepends or []) ++ [ pkgs.ncurses ];
-  });
+  }) super.hscurses;
 
   # Looks like Avahi provides the missing library
   dnssd = super.dnssd.override { dns_sd = pkgs.avahi.override { withLibdnssdCompat = true; }; };
 
   # tests depend on executable
-  ghcide = overrideCabal super.ghcide (drv: {
+  ghcide = overrideCabal (drv: {
     preCheck = ''export PATH="$PWD/dist/build/ghcide:$PATH"'';
-  });
+  }) super.ghcide;
 
   # GLUT uses `dlopen` to link to freeglut, so we need to set the RUNPATH correctly for
   # it to find `libglut.so` from the nix store. We do this by patching GLUT.cabal to pkg-config
@@ -377,22 +377,22 @@ self: super: builtins.intersectAttrs super {
   #
   # Additional note: nixpkgs' freeglut and macOS's OpenGL implementation do not cooperate,
   # so disable this on Darwin only
-  ${if pkgs.stdenv.isDarwin then null else "GLUT"} = addPkgconfigDepend (appendPatch super.GLUT ./patches/GLUT.patch) pkgs.freeglut;
+  ${if pkgs.stdenv.isDarwin then null else "GLUT"} = addPkgconfigDepend pkgs.freeglut (appendPatch ./patches/GLUT.patch super.GLUT);
 
-  libsystemd-journal = overrideCabal super.libsystemd-journal (old: {
+  libsystemd-journal = overrideCabal (old: {
     librarySystemDepends = old.librarySystemDepends or [] ++ [ pkgs.systemd ];
-  });
+  }) super.libsystemd-journal;
 
   # does not specify tests in cabal file, instead has custom runTest cabal hook,
   # so cabal2nix will not detect test dependencies.
-  either-unwrap = overrideCabal super.either-unwrap (drv: {
+  either-unwrap = overrideCabal (drv: {
     testHaskellDepends = (drv.testHaskellDepends or []) ++ [ self.test-framework self.test-framework-hunit ];
-  });
+  }) super.either-unwrap;
 
   # https://github.com/haskell-fswatch/hfsnotify/issues/62
   fsnotify = dontCheck super.fsnotify;
 
-  hidapi = addExtraLibrary super.hidapi pkgs.udev;
+  hidapi = addExtraLibrary pkgs.udev super.hidapi;
 
   hs-GeoIP = super.hs-GeoIP.override { GeoIP = pkgs.geoipWithDatabase; };
 
@@ -402,45 +402,45 @@ self: super: builtins.intersectAttrs super {
   stackage-curator = dontCheck super.stackage-curator;
 
   # hardcodes /usr/bin/tr: https://github.com/snapframework/io-streams/pull/59
-  io-streams = enableCabalFlag super.io-streams "NoInteractiveTests";
+  io-streams = enableCabalFlag "NoInteractiveTests" super.io-streams;
 
   # requires autotools to build
-  secp256k1 = addBuildTools super.secp256k1 [ pkgs.buildPackages.autoconf pkgs.buildPackages.automake pkgs.buildPackages.libtool ];
+  secp256k1 = addBuildTools [ pkgs.buildPackages.autoconf pkgs.buildPackages.automake pkgs.buildPackages.libtool ] super.secp256k1;
 
   # requires libsecp256k1 in pkg-config-depends
-  secp256k1-haskell = addPkgconfigDepend super.secp256k1-haskell pkgs.secp256k1;
+  secp256k1-haskell = addPkgconfigDepend pkgs.secp256k1 super.secp256k1-haskell;
 
   # tests require git and zsh
-  hapistrano = addBuildTools super.hapistrano [ pkgs.buildPackages.git pkgs.buildPackages.zsh ];
+  hapistrano = addBuildTools [ pkgs.buildPackages.git pkgs.buildPackages.zsh ] super.hapistrano;
 
   # This propagates this to everything depending on haskell-gi-base
-  haskell-gi-base = addBuildDepend super.haskell-gi-base pkgs.gobject-introspection;
+  haskell-gi-base = addBuildDepend pkgs.gobject-introspection super.haskell-gi-base;
 
   # requires valid, writeable $HOME
-  hatex-guide = overrideCabal super.hatex-guide (drv: {
+  hatex-guide = overrideCabal (drv: {
     preConfigure = ''
       ${drv.preConfigure or ""}
       export HOME=$PWD
     '';
-  });
+  }) super.hatex-guide;
 
   # https://github.com/plow-technologies/servant-streaming/issues/12
   servant-streaming-server = dontCheck super.servant-streaming-server;
 
   # https://github.com/haskell-servant/servant/pull/1238
   servant-client-core = if (pkgs.lib.getVersion super.servant-client-core) == "0.16" then
-    appendPatch super.servant-client-core ./patches/servant-client-core-redact-auth-header.patch
+    appendPatch ./patches/servant-client-core-redact-auth-header.patch super.servant-client-core
   else
     super.servant-client-core;
 
 
   # tests run executable, relying on PATH
   # without this, tests fail with "Couldn't launch intero process"
-  intero = overrideCabal super.intero (drv: {
+  intero = overrideCabal (drv: {
     preCheck = ''
       export PATH="$PWD/dist/build/intero:$PATH"
     '';
-  });
+  }) super.intero;
 
   # Break infinite recursion cycle with criterion and network-uri.
   js-flot = dontCheck super.js-flot;
@@ -470,23 +470,23 @@ self: super: builtins.intersectAttrs super {
   liquidhaskell = dontCheck (disableSharedExecutables super.liquidhaskell);
 
   # Without this override, the builds lacks pkg-config.
-  opencv-extra = addPkgconfigDepend super.opencv-extra pkgs.opencv3;
+  opencv-extra = addPkgconfigDepend pkgs.opencv3 super.opencv-extra;
 
   # Break cyclic reference that results in an infinite recursion.
   partial-semigroup = dontCheck super.partial-semigroup;
   colour = dontCheck super.colour;
   spatial-rotations = dontCheck super.spatial-rotations;
 
-  LDAP = dontCheck (overrideCabal super.LDAP (drv: {
+  LDAP = dontCheck (overrideCabal (drv: {
     librarySystemDepends = drv.librarySystemDepends or [] ++ [ pkgs.cyrus_sasl.dev ];
-  }));
+  }) super.LDAP);
 
   # Expects z3 to be on path so we replace it with a hard
   #
   # The tests expect additional solvers on the path, replace the
   # available ones also with hard coded paths, and remove the missing
   # ones from the test.
-  sbv = overrideCabal super.sbv (drv: {
+  sbv = overrideCabal (drv: {
     postPatch = ''
       sed -i -e 's|"abc"|"${pkgs.abc-verifier}/bin/abc"|' Data/SBV/Provers/ABC.hs
       sed -i -e 's|"boolector"|"${pkgs.boolector}/bin/boolector"|' Data/SBV/Provers/Boolector.hs
@@ -496,14 +496,14 @@ self: super: builtins.intersectAttrs super {
 
       sed -i -e 's|\[abc, boolector, cvc4, mathSAT, yices, z3, dReal\]|[abc, boolector, cvc4, yices, z3]|' SBVTestSuite/SBVConnectionTest.hs
    '';
-  });
+  }) super.sbv;
 
   # The test-suite requires a running PostgreSQL server.
   Frames-beam = dontCheck super.Frames-beam;
 
   # Compile manpages (which are in RST and are compiled with Sphinx).
   futhark =
-    overrideCabal (addBuildTools super.futhark (with pkgs.buildPackages; [makeWrapper python3Packages.sphinx]))
+    overrideCabal
       (_drv: {
         postBuild = (_drv.postBuild or "") + ''
         make -C docs man
@@ -513,12 +513,13 @@ self: super: builtins.intersectAttrs super {
         mkdir -p $out/share/man/man1
         mv docs/_build/man/*.1 $out/share/man/man1/
         '';
-      });
+      })
+      (addBuildTools (with pkgs.buildPackages; [makeWrapper python3Packages.sphinx]) super.futhark);
 
   git-annex = with pkgs;
     if (!stdenv.isLinux) then
       let path = lib.makeBinPath [ coreutils ];
-      in overrideCabal (addBuildTool super.git-annex buildPackages.makeWrapper) (_drv: {
+      in overrideCabal (_drv: {
         # This is an instance of https://github.com/NixOS/nix/pull/1085
         # Fails with:
         #   gpg: can't connect to the agent: File name too long
@@ -532,7 +533,7 @@ self: super: builtins.intersectAttrs super {
           wrapProgram $out/bin/git-annex \
             --prefix PATH : "${path}"
         '';
-      })
+      }) (addBuildTool buildPackages.makeWrapper super.git-annex)
     else super.git-annex;
 
   # The test suite has undeclared dependencies on git.
@@ -559,8 +560,8 @@ self: super: builtins.intersectAttrs super {
 
   # gtk2hs-buildtools is listed in setupHaskellDepends, but we
   # need it during the build itself, too.
-  cairo = addBuildTool super.cairo self.buildHaskellPackages.gtk2hs-buildtools;
-  pango = disableHardening (addBuildTool super.pango self.buildHaskellPackages.gtk2hs-buildtools) ["fortify"];
+  cairo = addBuildTool self.buildHaskellPackages.gtk2hs-buildtools super.cairo;
+  pango = disableHardening ["fortify"] (addBuildTool self.buildHaskellPackages.gtk2hs-buildtools super.pango);
 
   spago =
     let
@@ -584,7 +585,7 @@ self: super: builtins.intersectAttrs super {
         sha256 = "1hjdprm990vyxz86fgq14ajn0lkams7i00h8k2i2g1a0hjdwppq6";
       };
 
-      spagoWithPatches = appendPatch super.spago (
+      spagoWithPatches = appendPatch (
         # Spago needs a small patch to work with versions-5.0.0:
         # https://github.com/purescript/spago/pull/798
         # This can probably be removed with >spago-0.20.3.
@@ -592,14 +593,14 @@ self: super: builtins.intersectAttrs super {
           url = "https://github.com/purescript/spago/commit/dd4bf4413d9675c1c8065d24d0ed7b345c7fa5dd.patch";
           sha256 = "1i1r3f4n9mlkckx15bfrdy5m7gjf0zx7ycwyqra6qn34zpcbzpmf";
         }
-      );
+      ) super.spago;
 
       spagoWithOverrides = spagoWithPatches.override {
         # spago has not yet been updated for the latest dhall.
         dhall = self.dhall_1_38_1;
       };
 
-      spagoDocs = overrideCabal spagoWithOverrides (drv: {
+      spagoDocs = overrideCabal (drv: {
         postUnpack = (drv.postUnpack or "") + ''
           # Spago includes the following two files directly into the binary
           # with Template Haskell.  They are fetched at build-time from the
@@ -624,7 +625,7 @@ self: super: builtins.intersectAttrs super {
             "$sourceRoot/templates/docs-search-app-0.0.11.js" \
             "$sourceRoot/templates/purescript-docs-search-0.0.11"
         '';
-      });
+      }) spagoWithOverrides;
 
       # Tests require network access.
       spagoWithoutChecks = dontCheck spagoDocs;
@@ -638,11 +639,11 @@ self: super: builtins.intersectAttrs super {
   # mplayer-spot uses mplayer at runtime.
   mplayer-spot =
     let path = pkgs.lib.makeBinPath [ pkgs.mplayer ];
-    in overrideCabal (addBuildTool super.mplayer-spot pkgs.buildPackages.makeWrapper) (oldAttrs: {
+    in overrideCabal (oldAttrs: {
       postInstall = ''
         wrapProgram $out/bin/mplayer-spot --prefix PATH : "${path}"
       '';
-    });
+    }) (addBuildTool pkgs.buildPackages.makeWrapper super.mplayer-spot);
 
   # break infinite recursion with base-orphans
   primitive = dontCheck super.primitive;
@@ -650,12 +651,12 @@ self: super: builtins.intersectAttrs super {
 
   cut-the-crap =
     let path = pkgs.lib.makeBinPath [ pkgs.ffmpeg pkgs.youtube-dl ];
-    in overrideCabal (addBuildTool super.cut-the-crap pkgs.buildPackages.makeWrapper) (_drv: {
+    in overrideCabal (_drv: {
       postInstall = ''
         wrapProgram $out/bin/cut-the-crap \
           --prefix PATH : "${path}"
       '';
-    });
+    }) (addBuildTool pkgs.buildPackages.makeWrapper super.cut-the-crap);
 
   # Tests access homeless-shelter.
   hie-bios = dontCheck super.hie-bios;
@@ -663,9 +664,9 @@ self: super: builtins.intersectAttrs super {
 
   # Compiling the readme throws errors and has no purpose in nixpkgs
   aeson-gadt-th =
-    disableCabalFlag (doJailbreak (super.aeson-gadt-th)) "build-readme";
+    disableCabalFlag "build-readme" (doJailbreak super.aeson-gadt-th);
 
-  neuron = overrideCabal (super.neuron) (drv: {
+  neuron = overrideCabal (drv: {
     # neuron expects the neuron-search script to be in PATH at built-time.
     buildTools = [ pkgs.buildPackages.makeWrapper ];
     preConfigure = ''
@@ -678,14 +679,14 @@ self: super: builtins.intersectAttrs super {
       }
       PATH=$PATH:$out/bin
     '';
-  });
+  }) super.neuron;
 
   # Fix compilation of Setup.hs by removing the module declaration.
   # See: https://github.com/tippenein/guid/issues/1
-  guid = overrideCabal (super.guid) (drv: {
+  guid = overrideCabal (drv: {
     prePatch = "sed -i '1d' Setup.hs"; # 1st line is module declaration, remove it
     doCheck = false;
-  });
+  }) super.guid;
 
   # Tests disabled as recommended at https://github.com/luke-clifton/shh/issues/39
   shh = dontCheck super.shh;
@@ -696,16 +697,16 @@ self: super: builtins.intersectAttrs super {
   postgresql-libpq-notify = dontCheck super.postgresql-libpq-notify;
   postgresql-pure = dontCheck super.postgresql-pure;
 
-  retrie = overrideCabal super.retrie (drv: {
+  retrie = overrideCabal (drv: {
     testToolDepends = [ pkgs.git pkgs.mercurial ];
-  });
+  }) super.retrie;
 
-  nix-output-monitor = overrideCabal super.nix-output-monitor {
+  nix-output-monitor = overrideCabal {
     # Can't ran the golden-tests with nix, because they call nix
     testTarget = "unit-tests";
-  };
+  } super.nix-output-monitor;
 
-  haskell-language-server = overrideCabal super.haskell-language-server (drv: {
+  haskell-language-server = overrideCabal (drv: {
     postInstall = "ln -s $out/bin/haskell-language-server $out/bin/haskell-language-server-${self.ghc.version}";
     testToolDepends = [ self.cabal-install pkgs.git ];
     testTarget = "func-test"; # wrapper test accesses internet
@@ -713,14 +714,14 @@ self: super: builtins.intersectAttrs super {
       export PATH=$PATH:$PWD/dist/build/haskell-language-server:$PWD/dist/build/haskell-language-server-wrapper
       export HOME=$TMPDIR
     '';
-  });
+  }) super.haskell-language-server;
 
   # tests depend on a specific version of solc
   hevm = dontCheck (doJailbreak super.hevm);
 
   # hadolint enables static linking by default in the cabal file, so we have to explicitly disable it.
   # https://github.com/hadolint/hadolint/commit/e1305042c62d52c2af4d77cdce5d62f6a0a3ce7b
-  hadolint = disableCabalFlag super.hadolint "static";
+  hadolint = disableCabalFlag "static" super.hadolint;
 
   # Test suite tries to execute the build product "doctest-driver-gen", but it's not in $PATH.
   doctest-driver-gen = dontCheck super.doctest-driver-gen;
@@ -729,7 +730,7 @@ self: super: builtins.intersectAttrs super {
   prune-juice = dontCheck super.prune-juice;
 
   # based on https://github.com/gibiansky/IHaskell/blob/aafeabef786154d81ab7d9d1882bbcd06fc8c6c4/release.nix
-  ihaskell = overrideCabal super.ihaskell (drv: {
+  ihaskell = overrideCabal (drv: {
     configureFlags = (drv.configureFlags or []) ++ [
       # ihaskell's cabal file forces building a shared executable,
       # but without passing --enable-executable-dynamic, the RPATH
@@ -741,152 +742,152 @@ self: super: builtins.intersectAttrs super {
       export PATH=$PWD/dist/build/ihaskell:$PATH
       export GHC_PACKAGE_PATH=$PWD/dist/package.conf.inplace/:$GHC_PACKAGE_PATH
     '';
-  });
+  }) super.ihaskell;
 
   # tests need to execute the built executable
-  stutter = overrideCabal super.stutter (drv: {
+  stutter = overrideCabal (drv: {
     preCheck = ''
       export PATH=dist/build/stutter:$PATH
     '' + (drv.preCheck or "");
-  });
+  }) super.stutter;
 
   # Install man page and generate shell completions
   pinboard-notes-backup = overrideCabal
-    (generateOptparseApplicativeCompletion "pnbackup" super.pinboard-notes-backup)
     (drv: {
       postInstall = ''
         install -D man/pnbackup.1 $out/share/man/man1/pnbackup.1
       '' + (drv.postInstall or "");
-    });
+    })
+    (generateOptparseApplicativeCompletion "pnbackup" super.pinboard-notes-backup);
 
   # set more accurate set of platforms instead of maintaining
   # an ever growing list of platforms to exclude via unsupported-platforms
-  cpuid = overrideCabal super.cpuid {
+  cpuid = overrideCabal {
     platforms = pkgs.lib.platforms.x86;
-  };
+  } super.cpuid;
 
   # Pass the correct libarchive into the package.
   streamly-archive = super.streamly-archive.override { archive = pkgs.libarchive; };
 
   # passes the -msse2 flag which only works on x86 platforms
-  hsignal = overrideCabal super.hsignal {
+  hsignal = overrideCabal {
     platforms = pkgs.lib.platforms.x86;
-  };
+  } super.hsignal;
 
   # uses x86 intrinsics
-  blake3 = overrideCabal super.blake3 {
+  blake3 = overrideCabal {
     platforms = pkgs.lib.platforms.x86;
-  };
+  } super.blake3;
 
   # uses x86 intrinsics, see also https://github.com/NixOS/nixpkgs/issues/122014
-  crc32c = overrideCabal super.crc32c {
+  crc32c = overrideCabal {
     platforms = pkgs.lib.platforms.x86;
-  };
+  } super.crc32c;
 
   # uses x86 intrinsics
-  seqalign = overrideCabal super.seqalign {
+  seqalign = overrideCabal {
     platforms = pkgs.lib.platforms.x86;
-  };
+  } super.seqalign;
 
   # uses x86 intrinsics
-  geomancy = overrideCabal super.geomancy {
+  geomancy = overrideCabal {
     platforms = pkgs.lib.platforms.x86;
-  };
+  } super.geomancy;
 
-  hls-brittany-plugin = overrideCabal super.hls-brittany-plugin (drv: {
+  hls-brittany-plugin = overrideCabal (drv: {
     testToolDepends = [ pkgs.git ];
     preCheck = ''
       export HOME=$TMPDIR/home
     '';
-  });
-  hls-class-plugin = overrideCabal super.hls-class-plugin (drv: {
+  }) super.hls-brittany-plugin;
+  hls-class-plugin = overrideCabal (drv: {
     testToolDepends = [ pkgs.git ];
     preCheck = ''
       export HOME=$TMPDIR/home
     '';
-  });
-  hls-ormolu-plugin = overrideCabal super.hls-ormolu-plugin (drv: {
+  }) super.hls-class-plugin;
+  hls-ormolu-plugin = overrideCabal (drv: {
     testToolDepends = [ pkgs.git ];
     preCheck = ''
       export HOME=$TMPDIR/home
     '';
-  });
-  hls-fourmolu-plugin = overrideCabal super.hls-fourmolu-plugin (drv: {
+  }) super.hls-ormolu-plugin;
+  hls-fourmolu-plugin = overrideCabal (drv: {
     testToolDepends = [ pkgs.git ];
     preCheck = ''
       export HOME=$TMPDIR/home
     '';
-  });
-  hls-module-name-plugin = overrideCabal super.hls-module-name-plugin (drv: {
+  }) super.hls-fourmolu-plugin;
+  hls-module-name-plugin = overrideCabal (drv: {
     testToolDepends = [ pkgs.git ];
     preCheck = ''
       export HOME=$TMPDIR/home
     '';
-  });
-  hls-rename-plugin = overrideCabal super.hls-rename-plugin (drv: {
+  }) super.hls-module-name-plugin;
+  hls-rename-plugin = overrideCabal (drv: {
     testToolDepends = [ pkgs.git ];
     preCheck = ''
       export HOME=$TMPDIR/home
     '' + (drv.preCheck or "");
-  });
-  hls-splice-plugin = overrideCabal super.hls-splice-plugin (drv: {
+  }) super.hls-rename-plugin;
+  hls-splice-plugin = overrideCabal (drv: {
     testToolDepends = [ pkgs.git ];
     preCheck = ''
       export HOME=$TMPDIR/home
     '';
-  });
-  hls-floskell-plugin = overrideCabal super.hls-floskell-plugin (drv: {
+  }) super.hls-splice-plugin;
+  hls-floskell-plugin = overrideCabal (drv: {
     testToolDepends = [ pkgs.git ];
     preCheck = ''
       export HOME=$TMPDIR/home
     '';
-  });
-  hls-pragmas-plugin = overrideCabal super.hls-pragmas-plugin (drv: {
+  }) super.hls-floskell-plugin;
+  hls-pragmas-plugin = overrideCabal (drv: {
     testToolDepends = [ pkgs.git ];
     preCheck = ''
       export HOME=$TMPDIR/home
     '';
-  });
-  hiedb = overrideCabal super.hiedb (drv: {
+  }) super.hls-pragmas-plugin;
+  hiedb = overrideCabal (drv: {
     preCheck = ''
       export PATH=$PWD/dist/build/hiedb:$PATH
     '';
-  });
-  hls-call-hierarchy-plugin = overrideCabal super.hls-call-hierarchy-plugin (drv: {
+  }) super.hiedb;
+  hls-call-hierarchy-plugin = overrideCabal (drv: {
     preCheck = ''
       export HOME=$TMPDIR/home
     '';
-  });
+  }) super.hls-call-hierarchy-plugin;
   # Tests have file permissions expections that don‘t work with the nix store.
   hls-stylish-haskell-plugin = dontCheck super.hls-stylish-haskell-plugin;
-  hls-haddock-comments-plugin = overrideCabal super.hls-haddock-comments-plugin (drv: {
+  hls-haddock-comments-plugin = overrideCabal (drv: {
     testToolDepends = [ pkgs.git ];
     preCheck = ''
       export HOME=$TMPDIR/home
     '';
-  });
-  hls-eval-plugin = overrideCabal super.hls-eval-plugin (drv: {
+  }) super.hls-haddock-comments-plugin;
+  hls-eval-plugin = overrideCabal (drv: {
     testToolDepends = [ pkgs.git ];
     preCheck = ''
       export HOME=$TMPDIR/home
     '';
-  });
+  }) super.hls-eval-plugin;
 
-  taglib = overrideCabal super.taglib (drv: {
+  taglib = overrideCabal (drv: {
     librarySystemDepends = [
       pkgs.zlib
     ] ++ (drv.librarySystemDepends or []);
-  });
+  }) super.taglib;
 
   # uses x86 assembler
-  inline-asm = overrideCabal super.inline-asm {
+  inline-asm = overrideCabal {
     platforms = pkgs.lib.platforms.x86;
-  };
+  } super.inline-asm;
 
   # uses x86 assembler in C bits
-  hw-prim-bits = overrideCabal super.hw-prim-bits {
+  hw-prim-bits = overrideCabal {
     platforms = pkgs.lib.platforms.x86;
-  };
+  } super.hw-prim-bits;
 
   # random 1.2.0 has tests that indirectly depend on
   # itself causing an infinite recursion at evaluation
@@ -897,7 +898,6 @@ self: super: builtins.intersectAttrs super {
   # not used to link against by anyone, we can make it’s closure smaller and
   # add its runtime dependencies in `haskellPackages` (as opposed to cabal2nix).
   cabal2nix-unstable = overrideCabal
-    (justStaticExecutables super.cabal2nix-unstable)
     (drv: {
       buildTools = (drv.buildTools or []) ++ [
         pkgs.buildPackages.makeWrapper
@@ -908,21 +908,22 @@ self: super: builtins.intersectAttrs super {
             pkgs.lib.makeBinPath [ pkgs.nix pkgs.nix-prefetch-scripts ]
           }"
       '';
-    });
+    })
+    (justStaticExecutables super.cabal2nix-unstable);
 
   # test suite needs local redis daemon
   nri-redis = dontCheck super.nri-redis;
 
   # Make tophat find itself for _compiling_ its test suite
-  tophat = overrideCabal super.tophat (drv: {
+  tophat = overrideCabal (drv: {
     postPatch = ''
       sed -i 's|"tophat"|"./dist/build/tophat/tophat"|' app-test-bin/*.hs
     '' + (drv.postPatch or "");
-  });
+  }) super.tophat;
 
   # Runtime dependencies and CLI completion
   nvfetcher = generateOptparseApplicativeCompletion "nvfetcher" (overrideCabal
-    super.nvfetcher (drv: {
+    (drv: {
       # test needs network
       doCheck = false;
       buildTools = drv.buildTools or [ ] ++ [ pkgs.buildPackages.makeWrapper ];
@@ -931,16 +932,16 @@ self: super: builtins.intersectAttrs super {
           pkgs.lib.makeBinPath [ pkgs.nvchecker pkgs.nix-prefetch-git ]
         }"
       '';
-    }));
+    }) super.nvfetcher);
 
-  rel8 = addTestToolDepend super.rel8 pkgs.postgresql;
+  rel8 = addTestToolDepend pkgs.postgresql super.rel8;
 
   cachix = generateOptparseApplicativeCompletion "cachix" super.cachix;
 
   # Enable extra optimisations which increase build time, but also
   # later compiler performance, so we should do this for user's benefit.
   # Flag added in Agda 2.6.2
-  Agda = appendConfigureFlag super.Agda "-foptimise-heavily";
+  Agda = appendConfigureFlag "-foptimise-heavily" super.Agda;
 
   # ats-format uses cli-setup in Setup.hs which is quite happy to write
   # to arbitrary files in $HOME. This doesn't either not achieve anything
@@ -948,7 +949,7 @@ self: super: builtins.intersectAttrs super {
   # See also: https://hackage.haskell.org/package/cli-setup-0.2.1.4/docs/src/Distribution.CommandLine.html#setManpathGeneric
   ats-format = generateOptparseApplicativeCompletion "atsfmt" (
     justStaticExecutables (
-      overrideCabal super.ats-format (drv: {
+      overrideCabal (drv: {
         # use vanilla Setup.hs
         preCompileBuildDriver = ''
           cat > Setup.hs << EOF
@@ -964,7 +965,7 @@ self: super: builtins.intersectAttrs super {
         postInstall = ''
           installManPage man/atsfmt.1
         '' + (drv.postInstall or "");
-      })
+      }) super.ats-format
     )
   );
 
@@ -974,10 +975,10 @@ self: super: builtins.intersectAttrs super {
 
   # Some hash implementations are x86 only, but part of the test suite.
   # So executing and building it on non-x86 platforms will always fail.
-  hashes = overrideCabal super.hashes {
+  hashes = overrideCabal {
     doCheck = with pkgs.stdenv; hostPlatform == buildPlatform
       && buildPlatform.isx86;
-  };
+  } super.hashes;
 
   # procex relies on close_range which has been introduced in Linux 5.9,
   # the test suite seems to force the use of this feature (or the fallback
@@ -985,7 +986,7 @@ self: super: builtins.intersectAttrs super {
   # Kernel < 5.9. To check for this, we use uname -r to obtain the Kernel
   # version and sort -V to compare against our minimum version. If the
   # Kernel turns out to be older, we disable the test suite.
-  procex = overrideCabal super.procex (drv: {
+  procex = overrideCabal (drv: {
     postConfigure = ''
       minimumKernel=5.9
       higherVersion=`printf "%s\n%s\n" "$minimumKernel" "$(uname -r)" | sort -rV | head -n1`
@@ -994,5 +995,5 @@ self: super: builtins.intersectAttrs super {
         unset doCheck
       fi
     '' + (drv.postConfigure or "");
-  });
+  }) super.procex;
 }
diff --git a/pkgs/development/haskell-modules/configuration-tensorflow.nix b/pkgs/development/haskell-modules/configuration-tensorflow.nix
index 4848cb6111f..31c679f9b84 100644
--- a/pkgs/development/haskell-modules/configuration-tensorflow.nix
+++ b/pkgs/development/haskell-modules/configuration-tensorflow.nix
@@ -17,7 +17,7 @@ let
   };
 
   setTensorflowSourceRoot = dir: drv:
-    (overrideCabal drv (drv: { src = tensorflow-haskell; }))
+    (overrideCabal (drv: { src = tensorflow-haskell; }) drv)
       .overrideAttrs (_oldAttrs: {sourceRoot = "source/${dir}";});
 in
 {
diff --git a/pkgs/development/haskell-modules/lib/compose.nix b/pkgs/development/haskell-modules/lib/compose.nix
index c7cfa349dbf..d84c804272d 100644
--- a/pkgs/development/haskell-modules/lib/compose.nix
+++ b/pkgs/development/haskell-modules/lib/compose.nix
@@ -30,7 +30,7 @@ rec {
          > haskellPackages.aeson.meta.homepage
          "https://github.com/bos/aeson"
 
-         > x = haskell.lib.composable.overrideCabal (old: { homepage = old.homepage + "#readme"; }) haskellPackages.aeson
+         > x = haskell.lib.compose.overrideCabal (old: { homepage = old.homepage + "#readme"; }) haskellPackages.aeson
          > x.meta.homepage
          "https://github.com/bos/aeson#readme"
 
@@ -133,7 +133,7 @@ rec {
 
      Example:
 
-         > haskell.lib.composable.appendConfigureFlag "--profiling-detail=all-functions" haskellPackages.servant
+         > haskell.lib.compose.appendConfigureFlag "--profiling-detail=all-functions" haskellPackages.servant
    */
   appendConfigureFlag = x: appendConfigureFlags [x];
   appendConfigureFlags = xs: overrideCabal (drv: { configureFlags = (drv.configureFlags or []) ++ xs; });
@@ -144,7 +144,7 @@ rec {
   /* removeConfigureFlag drv x is a Haskell package like drv, but with
      all cabal configure arguments that are equal to x removed.
 
-         > haskell.lib.composable.removeConfigureFlag "--verbose" haskellPackages.servant
+         > haskell.lib.compose.removeConfigureFlag "--verbose" haskellPackages.servant
    */
   removeConfigureFlag = x: overrideCabal (drv: { configureFlags = lib.remove x (drv.configureFlags or []); });
 
diff --git a/pkgs/development/haskell-modules/make-package-set.nix b/pkgs/development/haskell-modules/make-package-set.nix
index d272f7375a8..5d86a685e1b 100644
--- a/pkgs/development/haskell-modules/make-package-set.nix
+++ b/pkgs/development/haskell-modules/make-package-set.nix
@@ -49,23 +49,23 @@ let
     nodejs = buildPackages.nodejs-slim;
     inherit (self) buildHaskellPackages ghc ghcWithHoogle ghcWithPackages;
     inherit (self.buildHaskellPackages) jailbreak-cabal;
-    hscolour = overrideCabal self.buildHaskellPackages.hscolour (drv: {
+    hscolour = overrideCabal (drv: {
       isLibrary = false;
       doHaddock = false;
       hyperlinkSource = false;      # Avoid depending on hscolour for this build.
       postFixup = "rm -rf $out/lib $out/share $out/nix-support";
-    });
-    cpphs = overrideCabal (self.cpphs.overrideScope (self: super: {
+    }) self.buildHaskellPackages.hscolour;
+    cpphs = overrideCabal (drv: {
+        isLibrary = false;
+        postFixup = "rm -rf $out/lib $out/share $out/nix-support";
+    }) (self.cpphs.overrideScope (self: super: {
       mkDerivation = drv: super.mkDerivation (drv // {
         enableSharedExecutables = false;
         enableSharedLibraries = false;
         doHaddock = false;
         useCpphs = false;
       });
-    })) (drv: {
-        isLibrary = false;
-        postFixup = "rm -rf $out/lib $out/share $out/nix-support";
-    });
+    }));
   };
 
   mkDerivation = makeOverridable mkDerivationImpl;
@@ -294,7 +294,7 @@ in package-set { inherit pkgs lib callPackage; } self // {
     #
     #     # default.nix
     #     with import <nixpkgs> {};
-    #     haskellPackages.extend (haskell.lib.packageSourceOverrides {
+    #     haskellPackages.extend (haskell.lib.compose.packageSourceOverrides {
     #       frontend = ./frontend;
     #       backend = ./backend;
     #       common = ./common;
diff --git a/pkgs/development/interpreters/dhall/build-dhall-package.nix b/pkgs/development/interpreters/dhall/build-dhall-package.nix
index 86797e9f136..f58546a9d3c 100644
--- a/pkgs/development/interpreters/dhall/build-dhall-package.nix
+++ b/pkgs/development/interpreters/dhall/build-dhall-package.nix
@@ -48,7 +48,7 @@
 let
   # HTTP support is disabled in order to force that HTTP dependencies are built
   # using Nix instead of using Dhall's support for HTTP imports.
-  dhallNoHTTP = haskell.lib.appendConfigureFlag dhall "-f-with-http";
+  dhallNoHTTP = haskell.lib.compose.appendConfigureFlag "-f-with-http" dhall;
 
   file = writeText "${name}.dhall" code;
 
diff --git a/pkgs/development/tools/continuous-integration/hci/default.nix b/pkgs/development/tools/continuous-integration/hci/default.nix
index dfca0c4d388..5c0c59845ce 100644
--- a/pkgs/development/tools/continuous-integration/hci/default.nix
+++ b/pkgs/development/tools/continuous-integration/hci/default.nix
@@ -1,13 +1,12 @@
 { haskell, haskellPackages, lib, makeWrapper, runc, stdenv }:
 let
-  inherit (haskell.lib) overrideCabal addBuildDepends;
+  inherit (haskell.lib.compose) overrideCabal addBuildDepends justStaticExecutables;
   inherit (lib) makeBinPath;
   bundledBins = lib.optional stdenv.isLinux runc;
 
   pkg =
     # justStaticExecutables is needed due to https://github.com/NixOS/nix/issues/2990
     overrideCabal
-      (addBuildDepends (haskell.lib.justStaticExecutables haskellPackages.hercules-ci-cli) [ makeWrapper ])
       (o: {
         postInstall = ''
           ${o.postInstall or ""}
@@ -15,7 +14,8 @@ let
           mv $out/bin/hci $out/libexec
           makeWrapper $out/libexec/hci $out/bin/hci --prefix PATH : ${makeBinPath bundledBins}
         '';
-      });
+      })
+      (addBuildDepends [ makeWrapper ] (justStaticExecutables haskellPackages.hercules-ci-cli));
 in pkg // {
     meta = pkg.meta // {
       position = toString ./default.nix + ":1";
diff --git a/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix b/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix
index bc464c2024e..00ae501e534 100644
--- a/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix
+++ b/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix
@@ -1,13 +1,12 @@
 { gnutar, gzip, git, haskell, haskellPackages, lib, makeWrapper, nixos, runc, stdenv }:
 let
-  inherit (haskell.lib) overrideCabal addBuildDepends;
+  inherit (haskell.lib.compose) overrideCabal addBuildDepends justStaticExecutables;
   inherit (lib) makeBinPath;
   bundledBins = [ gnutar gzip git ] ++ lib.optional stdenv.isLinux runc;
 
   pkg =
     # justStaticExecutables is needed due to https://github.com/NixOS/nix/issues/2990
     overrideCabal
-      (addBuildDepends (haskell.lib.justStaticExecutables haskellPackages.hercules-ci-agent) [ makeWrapper ])
       (o: {
         postInstall = ''
           ${o.postInstall or ""}
@@ -15,7 +14,8 @@ let
           mv $out/bin/hercules-ci-agent $out/libexec
           makeWrapper $out/libexec/hercules-ci-agent $out/bin/hercules-ci-agent --prefix PATH : ${makeBinPath bundledBins}
         '';
-      });
+      })
+      (addBuildDepends [ makeWrapper ] (justStaticExecutables haskellPackages.hercules-ci-agent));
 in pkg.overrideAttrs (o: {
     meta = o.meta // {
       position = toString ./default.nix + ":1";
diff --git a/pkgs/development/tools/haskell/dconf2nix/default.nix b/pkgs/development/tools/haskell/dconf2nix/default.nix
index cfd391866ee..4cc137b54f7 100644
--- a/pkgs/development/tools/haskell/dconf2nix/default.nix
+++ b/pkgs/development/tools/haskell/dconf2nix/default.nix
@@ -2,12 +2,12 @@
 
 let
   dconf2nix =
-    haskell.lib.justStaticExecutables
-      (haskell.lib.overrideCabal haskellPackages.dconf2nix (oldAttrs: {
+    haskell.lib.compose.justStaticExecutables
+      (haskell.lib.compose.overrideCabal (oldAttrs: {
         maintainers = (oldAttrs.maintainers or []) ++ [
           lib.maintainers.gvolpe
         ];
-      }));
+      }) haskellPackages.dconf2nix);
 in
 
 dconf2nix.overrideAttrs (oldAttrs: {
diff --git a/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix b/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix
index 7e8839b2e72..9f67317d71f 100644
--- a/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix
+++ b/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix
@@ -11,8 +11,8 @@ let
   inherit (lib) concatStringsSep concatMapStringsSep take splitString;
   getPackages = version: haskell.packages."ghc${version}";
   tunedHls = hsPkgs:
-    haskell.lib.justStaticExecutables
-    (haskell.lib.overrideCabal hsPkgs.haskell-language-server (old: {
+    haskell.lib.compose.justStaticExecutables
+    (haskell.lib.compose.overrideCabal (old: {
       postInstall = ''
         remove-references-to -t ${hsPkgs.ghc} $out/bin/haskell-language-server
         remove-references-to -t ${hsPkgs.shake.data} $out/bin/haskell-language-server
@@ -20,7 +20,7 @@ let
         remove-references-to -t ${hsPkgs.js-dgtable.data} $out/bin/haskell-language-server
         remove-references-to -t ${hsPkgs.js-flot.data} $out/bin/haskell-language-server
       '';
-    }));
+    }) hsPkgs.haskell-language-server);
   targets = version:
     let packages = getPackages version;
     in [
diff --git a/pkgs/development/tools/haskell/lambdabot/default.nix b/pkgs/development/tools/haskell/lambdabot/default.nix
index 5e372b4f387..0b0a9778c36 100644
--- a/pkgs/development/tools/haskell/lambdabot/default.nix
+++ b/pkgs/development/tools/haskell/lambdabot/default.nix
@@ -23,7 +23,7 @@ let allPkgs = pkgs: mueval.defaultPkgs pkgs ++ [ pkgs.lambdabot-trusted ] ++ pac
     modulesStr = lib.replaceChars ["\n"] [" "] modules;
     configStr = lib.replaceChars ["\n"] [" "] configuration;
 
-in haskellLib.overrideCabal haskellPackages.lambdabot (self: {
+in haskellLib.overrideCabal (self: {
   patches = (self.patches or []) ++ [ ./custom-config.patch ];
   postPatch = (self.postPatch or "") + ''
     substituteInPlace src/Main.hs \
@@ -38,4 +38,4 @@ in haskellLib.overrideCabal haskellPackages.lambdabot (self: {
     wrapProgram $out/bin/lambdabot \
       --prefix PATH ":" '${bins}'
   '';
-})
+}) haskellPackages.lambdabot
diff --git a/pkgs/development/tools/pandoc/default.nix b/pkgs/development/tools/pandoc/default.nix
index 7c286218d8e..475fa6a93e4 100644
--- a/pkgs/development/tools/pandoc/default.nix
+++ b/pkgs/development/tools/pandoc/default.nix
@@ -1,10 +1,10 @@
 { haskellPackages, fetchpatch, haskell, removeReferencesTo }:
 
 let
-  static = haskell.lib.justStaticExecutables haskellPackages.pandoc;
+  static = haskell.lib.compose.justStaticExecutables haskellPackages.pandoc;
 
 in
-  (haskell.lib.overrideCabal static (drv: {
+  (haskell.lib.compose.overrideCabal (drv: {
     configureFlags = drv.configureFlags or [] ++ ["-fembed_data_files"];
     buildDepends = drv.buildDepends or [] ++ [haskellPackages.file-embed];
     buildTools = (drv.buildTools or []) ++ [ removeReferencesTo ];
@@ -16,7 +16,7 @@ in
         sha256 = "gOtrWVylzwgu0YLD4SztqlXxtaXXGOf8nTqLwUBS7qs=";
       })
     ];
-  })).overrideAttrs (drv: {
+  }) static).overrideAttrs (drv: {
 
     # These libraries are still referenced, because they generate
     # a `Paths_*` module for figuring out their version.
diff --git a/pkgs/development/tools/pretty-simple/default.nix b/pkgs/development/tools/pretty-simple/default.nix
index c55e176176d..0a33b6e6b2e 100644
--- a/pkgs/development/tools/pretty-simple/default.nix
+++ b/pkgs/development/tools/pretty-simple/default.nix
@@ -1,6 +1,6 @@
 { haskell, haskellPackages, lib }:
 
-haskell.lib.justStaticExecutables (haskell.lib.overrideCabal haskellPackages.pretty-simple (oldAttrs: {
+haskell.lib.compose.justStaticExecutables (haskell.lib.compose.overrideCabal (oldAttrs: {
   maintainers = (oldAttrs.maintainers or []) ++ [
     lib.maintainers.cdepillabout
   ];
@@ -8,5 +8,5 @@ haskell.lib.justStaticExecutables (haskell.lib.overrideCabal haskellPackages.pre
   configureFlags = (oldAttrs.configureFlags or []) ++ ["-fbuildexe"];
 
   buildDepends = (oldAttrs.buildDepends or []) ++ [haskellPackages.optparse-applicative];
-}))
+}) haskellPackages.pretty-simple)
 
diff --git a/pkgs/development/tools/purescript/spago/default.nix b/pkgs/development/tools/purescript/spago/default.nix
index 980bca0fa2d..51516ed5b25 100644
--- a/pkgs/development/tools/purescript/spago/default.nix
+++ b/pkgs/development/tools/purescript/spago/default.nix
@@ -12,14 +12,14 @@
 
 let
   spago =
-    haskell.lib.justStaticExecutables
-      (haskell.lib.overrideCabal haskellPackages.spago (oldAttrs: {
+    haskell.lib.compose.justStaticExecutables
+      (haskell.lib.compose.overrideCabal (oldAttrs: {
         maintainers = (oldAttrs.maintainers or []) ++ [
           lib.maintainers.cdepillabout
         ];
         changelog =
           "https://github.com/purescript/spago/releases/tag/${oldAttrs.version}";
-      }));
+      }) haskellPackages.spago);
 in
 
 spago.overrideAttrs (oldAttrs: {
diff --git a/pkgs/development/tools/shellcheck/default.nix b/pkgs/development/tools/shellcheck/default.nix
index 284ce6d817a..cf767515082 100644
--- a/pkgs/development/tools/shellcheck/default.nix
+++ b/pkgs/development/tools/shellcheck/default.nix
@@ -15,7 +15,7 @@ let
       };
     in drv' // { meta = meta' // overrideFn meta'; };
 
-  bin = haskell.lib.justStaticExecutables haskellPackages.ShellCheck;
+  bin = haskell.lib.compose.justStaticExecutables haskellPackages.ShellCheck;
 
   shellcheck = stdenv.mkDerivation {
     pname = "shellcheck";
diff --git a/pkgs/test/haskell/documentationTarball/default.nix b/pkgs/test/haskell/documentationTarball/default.nix
index e3214fb49fe..33751028101 100644
--- a/pkgs/test/haskell/documentationTarball/default.nix
+++ b/pkgs/test/haskell/documentationTarball/default.nix
@@ -2,9 +2,9 @@
 
 let
   drv = haskellPackages.vector;
-  docs = pkgs.haskell.lib.documentationTarball drv;
+  docs = pkgs.haskell.lib.compose.documentationTarball drv;
 
-in pkgs.runCommand "test haskell.lib.documentationTarball" {
+in pkgs.runCommand "test haskell.lib.compose.documentationTarball" {
   meta = {
     inherit (docs.meta) platforms;
   };
diff --git a/pkgs/test/haskell/setBuildTarget/default.nix b/pkgs/test/haskell/setBuildTarget/default.nix
index 5a8391d0886..f0c78c51044 100644
--- a/pkgs/test/haskell/setBuildTarget/default.nix
+++ b/pkgs/test/haskell/setBuildTarget/default.nix
@@ -17,7 +17,7 @@ let
   drv = haskellPackages.callPackage pkgDef {};
 
   test  = target: excluded:
-    let only = pkgs.haskell.lib.setBuildTarget drv target;
+    let only = pkgs.haskell.lib.compose.setBuildTarget target drv;
     in ''
          if [[ ! -f "${only}/bin/${target}" ]]; then
            echo "${target} was not built"
@@ -31,7 +31,7 @@ let
      '';
 
 in
-pkgs.runCommand "test haskell.lib.setBuildTarget" {
+pkgs.runCommand "test haskell.lib.compose.setBuildTarget" {
   meta = {
     inherit (drv.meta) platforms;
   };
diff --git a/pkgs/tools/graphics/ldgallery/default.nix b/pkgs/tools/graphics/ldgallery/default.nix
index 84d179374ae..1b620656ce5 100644
--- a/pkgs/tools/graphics/ldgallery/default.nix
+++ b/pkgs/tools/graphics/ldgallery/default.nix
@@ -1,7 +1,7 @@
 { lib, pkgs, makeWrapper, haskellPackages, haskell, pandoc, imagemagick, CoreServices }:
 
 with lib;
-with haskell.lib;
+with haskell.lib.compose;
 
 let
   ldgallery-viewer = pkgs.callPackage ./viewer { inherit CoreServices; };
@@ -12,7 +12,7 @@ in
 # making sure that the versions of the compiler and viewer parts are in sync
 assert ldgallery-compiler.version == versions.majorMinor ldgallery-viewer.version;
 
-justStaticExecutables (overrideCabal ldgallery-compiler (oldAttrs: {
+justStaticExecutables (overrideCabal (oldAttrs: {
   pname = "ldgallery"; # bundled viewer + compiler
 
   buildTools = (oldAttrs.buildTools or []) ++ [ makeWrapper pandoc ];
@@ -50,4 +50,4 @@ justStaticExecutables (overrideCabal ldgallery-compiler (oldAttrs: {
 
   # other package metadata (maintainer, description, license, ...)
   # are inherited from the compiler package
-}))
+}) ldgallery-compiler)
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 0ed423b6e57..e6ad689c2d9 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -1631,7 +1631,7 @@ with pkgs;
 
   ecdsautils = callPackage ../tools/security/ecdsautils { };
 
-  echidna = haskell.lib.justStaticExecutables (haskellPackages.callPackage (../tools/security/echidna) { });
+  echidna = haskell.lib.compose.justStaticExecutables (haskellPackages.callPackage (../tools/security/echidna) { });
 
   sedutil = callPackage ../tools/security/sedutil { };
 
@@ -1781,7 +1781,7 @@ with pkgs;
 
   hime = callPackage ../tools/inputmethods/hime {};
 
-  hinit = haskell.lib.justStaticExecutables haskellPackages.hinit;
+  hinit = haskell.lib.compose.justStaticExecutables haskellPackages.hinit;
 
   hostctl = callPackage ../tools/system/hostctl { };
 
@@ -2308,7 +2308,7 @@ with pkgs;
 
   cue2pops = callPackage ../tools/cd-dvd/cue2pops { };
 
-  cabal2nix-unwrapped = haskell.lib.justStaticExecutables (haskell.lib.generateOptparseApplicativeCompletion "cabal2nix" haskellPackages.cabal2nix);
+  cabal2nix-unwrapped = haskell.lib.compose.justStaticExecutables (haskell.lib.compose.generateOptparseApplicativeCompletion "cabal2nix" haskellPackages.cabal2nix);
 
   cabal2nix = symlinkJoin {
     inherit (cabal2nix-unwrapped) name meta;
@@ -2926,7 +2926,7 @@ with pkgs;
 
   fsmark = callPackage ../tools/misc/fsmark { };
 
-  futhark = haskell.lib.justStaticExecutables haskellPackages.futhark;
+  futhark = haskell.lib.compose.justStaticExecutables haskellPackages.futhark;
 
   inherit (nodePackages) fx;
 
@@ -3336,7 +3336,7 @@ with pkgs;
   nix-direnv = callPackage ../tools/misc/nix-direnv { };
   nix-direnv-flakes = callPackage ../tools/misc/nix-direnv { enableFlakes = true; };
 
-  nix-output-monitor = haskell.lib.justStaticExecutables (haskellPackages.nix-output-monitor);
+  nix-output-monitor = haskell.lib.compose.justStaticExecutables (haskellPackages.nix-output-monitor);
 
   nix-template = callPackage ../tools/package-management/nix-template {
     inherit (darwin.apple_sdk.frameworks) Security;
@@ -4785,7 +4785,7 @@ with pkgs;
 
   uudeview = callPackage ../tools/misc/uudeview { };
 
-  uusi = haskell.lib.justStaticExecutables haskellPackages.uusi;
+  uusi = haskell.lib.compose.justStaticExecutables haskellPackages.uusi;
 
   uutils-coreutils = callPackage ../tools/misc/uutils-coreutils {
     inherit (python3Packages) sphinx;
@@ -6315,7 +6315,7 @@ with pkgs;
 
   icemon = libsForQt5.callPackage ../applications/networking/icemon { };
 
-  icepeak = haskell.lib.justStaticExecutables haskellPackages.icepeak;
+  icepeak = haskell.lib.compose.justStaticExecutables haskellPackages.icepeak;
 
   iceshelf = callPackage ../tools/backup/iceshelf { };
 
@@ -7368,7 +7368,7 @@ with pkgs;
     inherit (darwin.apple_sdk.frameworks) Foundation;
   };
 
-  madlang = haskell.lib.justStaticExecutables haskellPackages.madlang;
+  madlang = haskell.lib.compose.justStaticExecutables haskellPackages.madlang;
 
   maeparser = callPackage ../development/libraries/maeparser { };
 
@@ -7819,7 +7819,7 @@ with pkgs;
 
   ngrep = callPackage ../tools/networking/ngrep { };
 
-  neuron-notes = haskell.lib.justStaticExecutables (haskell.lib.generateOptparseApplicativeCompletion "neuron" haskellPackages.neuron);
+  neuron-notes = haskell.lib.compose.justStaticExecutables (haskell.lib.compose.generateOptparseApplicativeCompletion "neuron" haskellPackages.neuron);
 
   ngrok = ngrok-2;
 
@@ -7865,7 +7865,7 @@ with pkgs;
 
   nvchecker = with python3Packages; toPythonApplication nvchecker;
 
-  nvfetcher = haskell.lib.justStaticExecutables haskellPackages.nvfetcher;
+  nvfetcher = haskell.lib.compose.justStaticExecutables haskellPackages.nvfetcher;
 
   miller = callPackage ../tools/text/miller { };
 
@@ -8213,7 +8213,7 @@ with pkgs;
 
   update-dotdee = with python3Packages; toPythonApplication update-dotdee;
 
-  update-nix-fetchgit = haskell.lib.justStaticExecutables haskellPackages.update-nix-fetchgit;
+  update-nix-fetchgit = haskell.lib.compose.justStaticExecutables haskellPackages.update-nix-fetchgit;
 
   update-resolv-conf = callPackage ../tools/networking/openvpn/update-resolv-conf.nix { };
 
@@ -9573,7 +9573,7 @@ with pkgs;
 
   speech-denoiser = callPackage ../applications/audio/speech-denoiser {};
 
-  splot = haskell.lib.justStaticExecutables haskellPackages.splot;
+  splot = haskell.lib.compose.justStaticExecutables haskellPackages.splot;
 
   spotdl = callPackage ../tools/audio/spotdl { };
 
@@ -9687,13 +9687,13 @@ with pkgs;
 
   stuntman = callPackage ../tools/networking/stuntman { };
 
-  stutter = haskell.lib.justStaticExecutables haskellPackages.stutter;
+  stutter = haskell.lib.compose.justStaticExecutables haskellPackages.stutter;
 
   strongswan    = callPackage ../tools/networking/strongswan { };
   strongswanTNC = strongswan.override { enableTNC = true; };
   strongswanNM  = strongswan.override { enableNetworkManager = true; };
 
-  stylish-haskell = haskell.lib.justStaticExecutables haskellPackages.stylish-haskell;
+  stylish-haskell = haskell.lib.compose.justStaticExecutables haskellPackages.stylish-haskell;
 
   su = shadow.su;
 
@@ -10474,7 +10474,7 @@ with pkgs;
 
   wsmancli = callPackage ../tools/system/wsmancli {};
 
-  wstunnel = haskell.lib.justStaticExecutables haskellPackages.wstunnel;
+  wstunnel = haskell.lib.compose.justStaticExecutables haskellPackages.wstunnel;
 
   wolfebin = callPackage ../tools/networking/wolfebin {
     python = python2;
@@ -10523,7 +10523,7 @@ with pkgs;
 
   time = callPackage ../tools/misc/time { };
 
-  tweet-hs = haskell.lib.justStaticExecutables haskellPackages.tweet-hs;
+  tweet-hs = haskell.lib.compose.justStaticExecutables haskellPackages.tweet-hs;
 
   tweeny = callPackage ../development/libraries/tweeny { };
 
@@ -11457,7 +11457,7 @@ with pkgs;
 
   eql = callPackage ../development/compilers/eql {};
 
-  elm2nix = haskell.lib.justStaticExecutables haskellPackages.elm2nix;
+  elm2nix = haskell.lib.compose.justStaticExecutables haskellPackages.elm2nix;
 
   elmPackages = recurseIntoAttrs (callPackage ../development/compilers/elm {
     inherit (darwin.apple_sdk.frameworks) Security;
@@ -11964,14 +11964,14 @@ with pkgs;
 
   inherit (haskellPackages) ghc;
 
-  cabal-install = haskell.lib.justStaticExecutables haskellPackages.cabal-install;
+  cabal-install = haskell.lib.compose.justStaticExecutables haskellPackages.cabal-install;
 
-  stack = haskell.lib.justStaticExecutables haskellPackages.stack;
-  hlint = haskell.lib.justStaticExecutables haskellPackages.hlint;
+  stack = haskell.lib.compose.justStaticExecutables haskellPackages.stack;
+  hlint = haskell.lib.compose.justStaticExecutables haskellPackages.hlint;
 
-  krank = haskell.lib.justStaticExecutables haskellPackages.krank;
+  krank = haskell.lib.compose.justStaticExecutables haskellPackages.krank;
 
-  stylish-cabal = haskell.lib.justStaticExecutables haskellPackages.stylish-cabal;
+  stylish-cabal = haskell.lib.compose.justStaticExecutables haskellPackages.stylish-cabal;
 
   all-cabal-hashes = callPackage ../data/misc/hackage { };
 
@@ -12326,7 +12326,7 @@ with pkgs;
 
   knightos-z80e = callPackage ../development/tools/knightos/z80e { };
 
-  koka = haskell.lib.justStaticExecutables (haskellPackages.callPackage ../development/compilers/koka { });
+  koka = haskell.lib.compose.justStaticExecutables (haskellPackages.callPackage ../development/compilers/koka { });
 
   kotlin = callPackage ../development/compilers/kotlin { };
   kotlin-native = callPackage ../development/compilers/kotlin/native.nix { };
@@ -13169,19 +13169,19 @@ with pkgs;
 
   clooj = callPackage ../development/interpreters/clojure/clooj.nix { };
 
-  dhall = haskell.lib.justStaticExecutables haskellPackages.dhall;
+  dhall = haskell.lib.compose.justStaticExecutables haskellPackages.dhall;
 
-  dhall-bash = haskell.lib.justStaticExecutables haskellPackages.dhall-bash;
+  dhall-bash = haskell.lib.compose.justStaticExecutables haskellPackages.dhall-bash;
 
-  dhall-docs = haskell.lib.justStaticExecutables haskellPackages.dhall-docs;
+  dhall-docs = haskell.lib.compose.justStaticExecutables haskellPackages.dhall-docs;
 
-  dhall-lsp-server = haskell.lib.justStaticExecutables haskellPackages.dhall-lsp-server;
+  dhall-lsp-server = haskell.lib.compose.justStaticExecutables haskellPackages.dhall-lsp-server;
 
-  dhall-json = haskell.lib.justStaticExecutables haskellPackages.dhall-json;
+  dhall-json = haskell.lib.compose.justStaticExecutables haskellPackages.dhall-json;
 
-  dhall-nix = haskell.lib.justStaticExecutables haskellPackages.dhall-nix;
+  dhall-nix = haskell.lib.compose.justStaticExecutables haskellPackages.dhall-nix;
 
-  dhall-text = haskell.lib.justStaticExecutables haskellPackages.dhall-text;
+  dhall-text = haskell.lib.compose.justStaticExecutables haskellPackages.dhall-text;
 
   dhallPackages = recurseIntoAttrs (callPackage ./dhall-packages.nix { });
 
@@ -14428,7 +14428,7 @@ with pkgs;
 
   flootty = callPackage ../development/tools/flootty { };
 
-  fffuu = haskell.lib.justStaticExecutables (haskellPackages.callPackage ../tools/misc/fffuu { });
+  fffuu = haskell.lib.compose.justStaticExecutables (haskellPackages.callPackage ../tools/misc/fffuu { });
 
   ffuf = callPackage ../tools/security/ffuf { };
 
@@ -14596,7 +14596,7 @@ with pkgs;
     guile = guile_2_0;
   };
 
-  hadolint = haskell.lib.justStaticExecutables haskellPackages.hadolint;
+  hadolint = haskell.lib.compose.justStaticExecutables haskellPackages.hadolint;
 
   halfempty = callPackage ../development/tools/halfempty {};
 
@@ -14825,8 +14825,8 @@ with pkgs;
 
   msitools = callPackage ../development/tools/misc/msitools { };
 
-  haskell-ci = haskell.lib.justStaticExecutables haskellPackages.haskell-ci;
-  haskell-ci-unstable = lowPrio (haskell.lib.justStaticExecutables haskellPackages.haskell-ci-unstable);
+  haskell-ci = haskell.lib.compose.justStaticExecutables haskellPackages.haskell-ci;
+  haskell-ci-unstable = lowPrio (haskell.lib.compose.justStaticExecutables haskellPackages.haskell-ci-unstable);
 
   neoload = callPackage ../development/tools/neoload {
     licenseAccepted = (config.neoload.accept_license or false);
@@ -15116,7 +15116,7 @@ with pkgs;
     inherit (darwin.apple_sdk.frameworks) Security;
   };
 
-  shake = haskell.lib.justStaticExecutables haskellPackages.shake;
+  shake = haskell.lib.compose.justStaticExecutables haskellPackages.shake;
 
   shallot = callPackage ../tools/misc/shallot { };
 
@@ -15692,7 +15692,7 @@ with pkgs;
   c-blosc = callPackage ../development/libraries/c-blosc { };
 
   # justStaticExecutables is needed due to https://github.com/NixOS/nix/issues/2990
-  cachix = haskell.lib.justStaticExecutables haskellPackages.cachix;
+  cachix = haskell.lib.compose.justStaticExecutables haskellPackages.cachix;
 
   hercules-ci-agent = callPackage ../development/tools/continuous-integration/hercules-ci-agent { };
 
@@ -15700,7 +15700,7 @@ with pkgs;
 
   isa-l = callPackage ../development/libraries/isa-l { };
 
-  niv = lib.getBin (haskell.lib.justStaticExecutables haskellPackages.niv);
+  niv = lib.getBin (haskell.lib.compose.justStaticExecutables haskellPackages.niv);
 
   ormolu = haskellPackages.ormolu.bin;
 
@@ -16593,7 +16593,7 @@ with pkgs;
 
   glib-testing = callPackage ../development/libraries/glib-testing { };
 
-  glirc = haskell.lib.justStaticExecutables haskellPackages.glirc;
+  glirc = haskell.lib.compose.justStaticExecutables haskellPackages.glirc;
 
   gom = callPackage ../development/libraries/gom { };
 
@@ -16984,7 +16984,7 @@ with pkgs;
 
   json2hcl = callPackage ../development/tools/json2hcl { };
 
-  json2yaml = haskell.lib.justStaticExecutables haskellPackages.json2yaml;
+  json2yaml = haskell.lib.compose.justStaticExecutables haskellPackages.json2yaml;
 
   json-glib = callPackage ../development/libraries/json-glib { };
 
@@ -18442,7 +18442,7 @@ with pkgs;
 
   matio = callPackage ../development/libraries/matio { };
 
-  matterhorn = haskell.lib.justStaticExecutables haskellPackages.matterhorn;
+  matterhorn = haskell.lib.compose.justStaticExecutables haskellPackages.matterhorn;
 
   maxflow = callPackage ../development/libraries/maxflow { };
 
@@ -18929,7 +18929,7 @@ with pkgs;
 
   pkgdiff = callPackage ../tools/misc/pkgdiff { };
 
-  place-cursor-at = haskell.lib.justStaticExecutables haskellPackages.place-cursor-at;
+  place-cursor-at = haskell.lib.compose.justStaticExecutables haskellPackages.place-cursor-at;
 
   plib = callPackage ../development/libraries/plib { };
 
@@ -19205,7 +19205,7 @@ with pkgs;
   kissfft = callPackage ../development/libraries/kissfft { };
 
   lambdabot = callPackage ../development/tools/haskell/lambdabot {
-    haskellLib = haskell.lib;
+    haskellLib = haskell.lib.compose;
   };
 
   lambda-mod-zsh-theme = callPackage ../shells/zsh/lambda-mod-zsh-theme { };
@@ -20628,7 +20628,7 @@ with pkgs;
 
   hashi-ui = callPackage ../servers/hashi-ui {};
 
-  hasura-graphql-engine = haskell.lib.justStaticExecutables haskellPackages.graphql-engine;
+  hasura-graphql-engine = haskell.lib.compose.justStaticExecutables haskellPackages.graphql-engine;
 
   hasura-cli = callPackage ../servers/hasura/cli.nix { };
 
@@ -21384,7 +21384,7 @@ with pkgs;
   sogo = callPackage ../servers/web-apps/sogo { };
 
   spacecookie =
-    haskell.lib.justStaticExecutables haskellPackages.spacecookie;
+    haskell.lib.compose.justStaticExecutables haskellPackages.spacecookie;
 
   spawn_fcgi = callPackage ../servers/http/spawn-fcgi { };
 
@@ -24290,9 +24290,9 @@ with pkgs;
 
   dablin = callPackage ../applications/radio/dablin { };
 
-  darcs = haskell.lib.overrideCabal (haskell.lib.justStaticExecutables haskellPackages.darcs) (drv: {
+  darcs = haskell.lib.compose.overrideCabal (drv: {
     configureFlags = (lib.remove "-flibrary" drv.configureFlags or []) ++ ["-f-library"];
-  });
+  }) (haskell.lib.compose.justStaticExecutables haskellPackages.darcs);
 
   darcs-to-git = callPackage ../applications/version-management/git-and-tools/darcs-to-git { };
 
@@ -25500,12 +25500,12 @@ with pkgs;
 
   hivelytracker = callPackage ../applications/audio/hivelytracker { };
 
-  hledger = haskell.lib.justStaticExecutables haskellPackages.hledger;
+  hledger = haskell.lib.compose.justStaticExecutables haskellPackages.hledger;
   hledger-check-fancyassertions = callPackage ../applications/office/hledger-check-fancyassertions { };
-  hledger-iadd = haskell.lib.justStaticExecutables haskellPackages.hledger-iadd;
-  hledger-interest = haskell.lib.justStaticExecutables haskellPackages.hledger-interest;
-  hledger-ui = haskell.lib.justStaticExecutables haskellPackages.hledger-ui;
-  hledger-web = haskell.lib.justStaticExecutables haskellPackages.hledger-web;
+  hledger-iadd = haskell.lib.compose.justStaticExecutables haskellPackages.hledger-iadd;
+  hledger-interest = haskell.lib.compose.justStaticExecutables haskellPackages.hledger-interest;
+  hledger-ui = haskell.lib.compose.justStaticExecutables haskellPackages.hledger-ui;
+  hledger-web = haskell.lib.compose.justStaticExecutables haskellPackages.hledger-web;
 
   homebank = callPackage ../applications/office/homebank {
     gtk = gtk3;
@@ -25523,7 +25523,7 @@ with pkgs;
 
   hdl-dump = callPackage ../tools/misc/hdl-dump { };
 
-  hpack = haskell.lib.justStaticExecutables haskellPackages.hpack;
+  hpack = haskell.lib.compose.justStaticExecutables haskellPackages.hpack;
 
   hpcg = callPackage ../tools/misc/hpcg/default.nix { };
 
@@ -25594,7 +25594,7 @@ with pkgs;
 
   pinboard = with python3Packages; toPythonApplication pinboard;
 
-  pinboard-notes-backup = haskell.lib.justStaticExecutables haskellPackages.pinboard-notes-backup;
+  pinboard-notes-backup = haskell.lib.compose.justStaticExecutables haskellPackages.pinboard-notes-backup;
 
   pixelnuke = callPackage ../applications/graphics/pixelnuke { };
 
@@ -28204,7 +28204,7 @@ with pkgs;
   teamspeak_client = libsForQt5.callPackage ../applications/networking/instant-messengers/teamspeak/client.nix { };
   teamspeak_server = callPackage ../applications/networking/instant-messengers/teamspeak/server.nix { };
 
-  taskell = haskell.lib.justStaticExecutables haskellPackages.taskell;
+  taskell = haskell.lib.compose.justStaticExecutables haskellPackages.taskell;
 
   tap-plugins = callPackage ../applications/audio/tap-plugins { };
 
@@ -28507,7 +28507,7 @@ with pkgs;
 
   uroboros = callPackage ../tools/system/uroboros { };
 
-  uuagc = haskell.lib.justStaticExecutables haskellPackages.uuagc;
+  uuagc = haskell.lib.compose.justStaticExecutables haskellPackages.uuagc;
 
   uucp = callPackage ../tools/misc/uucp { };
 
@@ -29702,7 +29702,7 @@ with pkgs;
 
   bean-add = callPackage ../applications/office/beancount/bean-add.nix { };
 
-  bench = haskell.lib.justStaticExecutables haskellPackages.bench;
+  bench = haskell.lib.compose.justStaticExecutables haskellPackages.bench;
 
   beret = callPackage ../games/beret { };
 
@@ -32413,9 +32413,9 @@ with pkgs;
 
   nix-bundle = callPackage ../tools/package-management/nix-bundle { };
 
-  nix-delegate = haskell.lib.justStaticExecutables haskellPackages.nix-delegate;
-  nix-deploy = haskell.lib.justStaticExecutables haskellPackages.nix-deploy;
-  nix-diff = haskell.lib.justStaticExecutables haskellPackages.nix-diff;
+  nix-delegate = haskell.lib.compose.justStaticExecutables haskellPackages.nix-delegate;
+  nix-deploy = haskell.lib.compose.justStaticExecutables haskellPackages.nix-deploy;
+  nix-diff = haskell.lib.compose.justStaticExecutables haskellPackages.nix-diff;
 
   nix-du = callPackage ../tools/package-management/nix-du {
     inherit (darwin.apple_sdk.frameworks) Security;
@@ -32429,7 +32429,7 @@ with pkgs;
   };
   nix-index = callPackage ../tools/package-management/nix-index/wrapper.nix { };
 
-  nix-linter = haskell.lib.justStaticExecutables (haskellPackages.nix-linter);
+  nix-linter = haskell.lib.compose.justStaticExecutables (haskellPackages.nix-linter);
 
   nixos-option = callPackage ../tools/nix/nixos-option { };
 
@@ -32460,7 +32460,7 @@ with pkgs;
 
   nix-top = callPackage ../tools/package-management/nix-top { };
 
-  nix-tree = haskell.lib.justStaticExecutables (haskellPackages.nix-tree);
+  nix-tree = haskell.lib.compose.justStaticExecutables (haskellPackages.nix-tree);
 
   nix-universal-prefetch = callPackage ../tools/package-management/nix-universal-prefetch { };
 
@@ -32476,7 +32476,7 @@ with pkgs;
 
   nix-simple-deploy = callPackage ../tools/package-management/nix-simple-deploy { };
 
-  nixfmt = haskell.lib.justStaticExecutables haskellPackages.nixfmt;
+  nixfmt = haskell.lib.compose.justStaticExecutables haskellPackages.nixfmt;
 
   nixpkgs-fmt = callPackage ../tools/nix/nixpkgs-fmt { };
 
diff --git a/pkgs/top-level/haskell-packages.nix b/pkgs/top-level/haskell-packages.nix
index 3b89aabf1fd..4f6567ca230 100644
--- a/pkgs/top-level/haskell-packages.nix
+++ b/pkgs/top-level/haskell-packages.nix
@@ -19,13 +19,13 @@ let
     "ghcHEAD"
   ];
 
-  haskellLib = import ../development/haskell-modules/lib.nix {
+  haskellLibUncomposable = import ../development/haskell-modules/lib.nix {
     inherit (pkgs) lib;
     inherit pkgs;
   };
 
   callPackage = newScope {
-    inherit haskellLib;
+    haskellLib = haskellLibUncomposable.compose;
     overrides = pkgs.haskell.packageOverrides;
   };
 
@@ -44,7 +44,7 @@ let
   inherit (pkgs.haskell) compiler packages;
 
 in {
-  lib = haskellLib;
+  lib = haskellLibUncomposable;
 
   package-list = callPackage ../development/haskell-modules/package-list.nix {};