lib: add makeScope

This commit is contained in:
Thomas Tuegel 2015-09-27 09:45:23 -05:00
parent d15e437cff
commit f9e5745efa

View File

@ -164,4 +164,23 @@ rec {
drv' = (lib.head outputsList).value; drv' = (lib.head outputsList).value;
in lib.deepSeq drv' drv'; in lib.deepSeq drv' drv';
/* Make a set of packages with a common scope. All packages called
with the provided `callPackage' will be evaluated with the same
arguments. Any package in the set may depend on any other. The
`override' function allows subsequent modification of the package
set in a consistent way, i.e. all packages in the set will be
called with the overridden packages. The package sets may be
hierarchical: the packages in the set are called with the scope
provided by `newScope' and the set provides a `newScope' attribute
which can form the parent scope for later package sets. */
makeScope = newScope: f:
let self = f self // {
newScope = scope: newScope (self // scope);
callPackage = self.newScope {};
override = g: makeScope newScope (self_:
let super = f self_;
in super // g super self_);
};
in self;
} }