doc/haskell: don't use lib.recursiveUpdate in overlays
`lib.recursiveUpdate` indiscriminately recurses into all attribute sets, also into derivations. This means that it is possible that evaluating a derivation in the final haskell package set can cause something in `prev.haskell` to be forced by `recursiveUpdate`, potentially causing an evaluation error that should not happen. It can be fixed using a well-crafted predicate for `lib.recursiveUpdateUntil`, but most robust is just explicitly writing out the desired merging manually.
This commit is contained in:
@@ -1229,12 +1229,14 @@ in
|
|||||||
in
|
in
|
||||||
|
|
||||||
{
|
{
|
||||||
haskell = lib.recursiveUpdate prev.haskell {
|
haskell = prev.haskell // {
|
||||||
compiler.${ghcName} = prev.haskell.compiler.${ghcName}.override {
|
compiler = prev.haskell.compiler // {
|
||||||
|
${ghcName} = prev.haskell.compiler.${ghcName}.override {
|
||||||
# Unfortunately, the GHC setting is named differently for historical reasons
|
# Unfortunately, the GHC setting is named differently for historical reasons
|
||||||
enableProfiledLibs = enableProfiling;
|
enableProfiledLibs = enableProfiling;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
};
|
||||||
})
|
})
|
||||||
|
|
||||||
(final: prev:
|
(final: prev:
|
||||||
@@ -1244,8 +1246,9 @@ in
|
|||||||
in
|
in
|
||||||
|
|
||||||
{
|
{
|
||||||
haskell = lib.recursiveUpdate prev.haskell {
|
haskell = prev.haskell // {
|
||||||
packages.${ghcName} = prev.haskell.packages.${ghcName}.override {
|
packages = prev.haskell.packages // {
|
||||||
|
${ghcName} = prev.haskell.packages.${ghcName}.override {
|
||||||
overrides = hfinal: hprev: {
|
overrides = hfinal: hprev: {
|
||||||
mkDerivation = args: hprev.mkDerivation (args // {
|
mkDerivation = args: hprev.mkDerivation (args // {
|
||||||
# Since we are forcing our ideas upon mkDerivation, this change will
|
# Since we are forcing our ideas upon mkDerivation, this change will
|
||||||
@@ -1272,6 +1275,7 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
};
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user