Overrding stdenv just for Haskell packages

I would like to override the stdenv just for Haskell packages so that I can use a different linker (lld).

The obvious thing is to do something like:

self: super: {
  haskell = super.haskell.override { stdenv = lldStdenv; };
}

This doesn’t work since haskell makes use of the pkgs argument as well as sets like buildPackages, etc.

I could go through all of these (pkgs, buildPackages, targetPackages, etc) and override them all as well individually but it feels like there should be a better way to do this.

I also tried using newScope to overlay a different stdenv and then use that to callPackage the Haskell package set, but that also didn’t modify the other sets.

I do not want to override stdenv in general though, since then the whole world would rebuild.
I just want to override stdenv wherever it is used in haskellPackages whether it’s directly or through something like targetPackages.stdenv.

Any ideas?

A similar question was asked here: Request explanation of cross-compilation-related package sets (buildPackages, targetPackages, etc)