From 3cf43547f4be03d1d6eb0bbfc557e2dbc13b4095 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Mon, 20 Aug 2018 13:09:15 -0400 Subject: [PATCH] lib: Use lib.fixed-points.extends to avoid repetition Another attempt after my sloppy https://github.com/NixOS/nixpkgs/commit/48ccdf322d9e7a68d0caf5833511ee3e53ec7d3a. @Infinisil, thanks again, reverted in https://github.com/NixOS/nixpkgs/commit/4794aa5de233b5bf2d1c3245946379699d023467 and explained my mistakes in https://github.com/NixOS/nixpkgs/commit/48ccdf322d9e7a68d0caf5833511ee3e53ec7d3a#commitcomment-29678643. I start with their work and provide this proof of this commit's correctness: ```nix (lib.fixedPoints.extends (lib.flip g) f) # now ((f: rattrs: self: let super = rattrs self; in super // f self super) (lib.flip g) f) # inline extends (self: let super = f self; in super // (lib.flip g) self super) # beta reduce (self: let super = f self; in super // g super self) # beta reduce (self_: let super = f self_; in super // g super self_) # alpha rename (self_: let super = f self_; in super // g super self_) # original, same ``` Eventually we might harmonize `overrideScope`'s `g` parameter with the general pattern, but I leave that breaking change as a separate step. Best not to refactor and break at once, and at least the abstractions make the oddity clearer. --- lib/customisation.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/customisation.nix b/lib/customisation.nix index 480280428909..0107ed33d9e4 100644 --- a/lib/customisation.nix +++ b/lib/customisation.nix @@ -195,9 +195,10 @@ rec { let self = f self // { newScope = scope: newScope (self // scope); callPackage = self.newScope {}; + # TODO(@Ericson2314): Haromonize argument order of `g` with everything else overrideScope = g: makeScope newScope - (self_: let super = f self_; in super // g super self_); + (lib.fixedPoints.extends (lib.flip g) f); packages = f; }; in self;