From 3c8b33eee442fd573d47555122cfe358134aeb64 Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Thu, 8 Jan 2015 18:29:37 +0100 Subject: [PATCH] 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! --- pkgs/development/haskell-modules/default.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/development/haskell-modules/default.nix b/pkgs/development/haskell-modules/default.nix index 846f85da66f..d65ebd63c75 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 // {