我已阅读 Oliver Charles 的文章,标题为“我如何使用 Nix 进行开发”。现在我也想在我的 Haskell 开发中使用 Nix。然而,让我有点困惑的是本地 nix 构建脚本的描述:
{ haskellPackages ? (import <nixpkgs> {}).haskellPackages }:
let
inherit (haskellPackages) cabal cabalInstall_1_18_0_2
text mtl transformers; # Haskell dependencies here
in cabal.mkDerivation (self: {
pname = "project-name";
version = "1.0.0";
src = ./.;
buildDepends = [
# As imported above
text mtl transformers
];
buildTools = [ cabalInstall_1_18_0_2 ];
enableSplitObjs = false;
})
(来源:上文引用的文章)
如果我没记错的话,Nix 通过从传递给函数的属性集派生哈希来保证二进制替换。但是,在这种情况下,没有与 src 属性关联的版本控制。因此,我认为本地修改我的代码意味着不同的编译结果与相同的哈希相关联。这不会破坏 Nix 的保证吗?Nix 是否足够聪明以检测文件系统的更改(例如通过查看时间戳)?