diff --git a/pkgs/development/haskell-modules/make-package-set.nix b/pkgs/development/haskell-modules/make-package-set.nix index a54967c4e45e..87ac65307aab 100644 --- a/pkgs/development/haskell-modules/make-package-set.nix +++ b/pkgs/development/haskell-modules/make-package-set.nix @@ -97,7 +97,20 @@ let }; in stdenv.lib.makeOverridable drvScope (auto // manualArgs); - mkScope = scope: pkgs // pkgs.xorg // pkgs.gnome2 // { inherit stdenv; } // scope; + mkScope = scope: let + ps = pkgs.__splicedPackages; + scopeSpliced = pkgs.splicePackages { + pkgsBuildBuild = scope.buildHaskellPackages.buildHaskellPackages; + pkgsBuildHost = scope.buildHaskellPackages; + pkgsBuildTarget = {}; + pkgsHostHost = {}; + pkgsHostTarget = scope; + pkgsTargetTarget = {}; + } // { + # Don't splice these + inherit (scope) ghc buildHaskellPackages; + }; + in ps // ps.xorg // ps.gnome2 // { inherit stdenv; } // scopeSpliced; defaultScope = mkScope self; callPackage = drv: args: callPackageWithScope defaultScope drv args; @@ -150,7 +163,7 @@ let in package-set { inherit pkgs stdenv callPackage; } self // { - inherit mkDerivation callPackage haskellSrc2nix hackage2nix; + inherit mkDerivation callPackage haskellSrc2nix hackage2nix buildHaskellPackages; inherit (haskellLib) packageSourceOverrides; diff --git a/pkgs/top-level/splice.nix b/pkgs/top-level/splice.nix index 9f5acd0a7de7..a9dd6c3ec0df 100644 --- a/pkgs/top-level/splice.nix +++ b/pkgs/top-level/splice.nix @@ -131,4 +131,8 @@ in callPackages = lib.callPackagesWith splicedPackages; newScope = extra: lib.callPackageWith (splicedPackages // extra); + + # Haskell package sets need this because they reimplement their own + # `newScope`. + __splicedPackages = splicedPackages // { recurseForDerivations = false; }; }