about summary refs log tree commit diff
path: root/pkgs/development/haskell-modules/default.nix
diff options
context:
space:
mode:
authorPeter Simons <simons@cryp.to>2015-01-08 18:29:37 +0100
committerPeter Simons <simons@cryp.to>2015-01-08 18:50:19 +0100
commit3c8b33eee442fd573d47555122cfe358134aeb64 (patch)
treeac840e9ab9bec22b9832e67ad9dba49cb4e17075 /pkgs/development/haskell-modules/default.nix
parentd737d463c6de53ddbcaa9e95b7e02dac05dda9b0 (diff)
downloadnixlib-3c8b33eee442fd573d47555122cfe358134aeb64.tar
nixlib-3c8b33eee442fd573d47555122cfe358134aeb64.tar.gz
nixlib-3c8b33eee442fd573d47555122cfe358134aeb64.tar.bz2
nixlib-3c8b33eee442fd573d47555122cfe358134aeb64.tar.lz
nixlib-3c8b33eee442fd573d47555122cfe358134aeb64.tar.xz
nixlib-3c8b33eee442fd573d47555122cfe358134aeb64.tar.zst
nixlib-3c8b33eee442fd573d47555122cfe358134aeb64.zip
haskell-modules: implement overrideScope method for deep overriding
deepOverride turns out to be completely unfeasible for non-trivial overrides.
Nix evaluates for an eternity, and then comes back saying:

  Too many heap sections: Increase MAXHINCR or MAX_HEAP_SECTS
  nix-instantiate killed by signal 6

The hand-written deep-override, on the other hand, performs the job in a
fraction of a second, no problem.

All bow to Russell O'Connor!
Diffstat (limited to 'pkgs/development/haskell-modules/default.nix')
-rw-r--r--pkgs/development/haskell-modules/default.nix6
1 files changed, 5 insertions, 1 deletions
diff --git a/pkgs/development/haskell-modules/default.nix b/pkgs/development/haskell-modules/default.nix
index 846f85da66ff..d65ebd63c751 100644
--- a/pkgs/development/haskell-modules/default.nix
+++ b/pkgs/development/haskell-modules/default.nix
@@ -31,8 +31,12 @@ let
         mkDerivation = drv: args.mkDerivation (drv // f drv);
       });
 
+      callPackageWithScope = scope: drv: args: (stdenv.lib.callPackageWith scope drv args) // {
+        overrideScope = f: callPackageWithScope (fix (extend scope.__unfix__ f)) drv args;
+      };
+
       defaultScope = pkgs // pkgs.xlibs // pkgs.gnome // self;
-      callPackage = drv: args: stdenv.lib.callPackageWith defaultScope drv args;
+      callPackage = drv: args: callPackageWithScope defaultScope drv args;
 
     in
       import ./hackage-packages.nix { inherit pkgs stdenv callPackage; } self // {