【发布时间】:2018-11-28 20:49:29
【问题描述】:
我在我的 ~/.config/nixpkgs/overlays/tmft.nix 中定义了一个覆盖,如下所示:
self: super: {
tfmt = import ../dists/tfmt/default.nix {};
}
没关系,我可以安装它。它是一个 haskell 包,我想将它作为我的 ghc 安装的一部分进行安装。所以我在 myHaskellEnv.nix 中有另一个叠加层,看起来像这样:
self: super: {
myHaskellEnv = super.haskellPackages.ghcWithHoogle
(haskellPackages: with haskellPackages;
[ tfmt ]);
}
只是,它抱怨它看不到 tfmt (error: undefined variable 'tfmt')。
我可以通过直接导入包来解决这个问题:
let tfmt = import ../dists/tfmt/default.nix {};
in self: super: {
myHaskellEnv = super.haskellPackages.ghcWithHoogle
(haskellPackages: with haskellPackages;
[ tfmt ]);
}
但这会破坏重用。
如何使用另一个叠加层?我尝试引用 super.tfmt,但这显示了同样的问题。
【问题讨论】:
-
我现在发现它在其他一些情况下也有效——它看起来很可疑,就像这里发生了一个评估顺序的事情,这样你就可以引用在词汇表之前的覆盖中定义的东西一个试图做参考。任何人都可以确认/否认这一点,如果这是真的,是否有共同的模式来处理?根据评估顺序重命名事物似乎并不是特别具有可扩展性。
-
不,没有那么简单——我尝试将 tfmt.nix 重命名为 00-tfmt.nix,以便在词法顺序中更早地强制它;无济于事。