我想弄清楚对于给定的 nixpkgs 版本,Haskell 软件包的具体版本会被选中。我对此很感兴趣,因此我知道要查看哪个文档版本,可以在 .cabal 文件中设置版本约束,了解在推广 nixpkgs 版本时出现问题的原因等。
我主要查看 nixpkgs 22.11,因为我们的代码最后就是在这个版本中运行的。我从 github 克隆了 Nixos/nixpkgs 并检查了该分支。很快我就发现了 pkgs/development/haskell-modules/hackage-packages.nix,其中有很多与 Haskell 命名相同的包,但没有“base”,只有“base_4_17_0_0”,除了“aeson”之外,还有“aeson_1_5_6_0”和“aeson_2_1_1_0”。
由此我得出结论,某个地方一定存在从 Haskell 的名称(如“base”和“aeson”)到源文件中某个内容的映射。但在哪里呢?搜索“base_4_17_0_0”只会得到一个匹配项。
我还发现 Cabal2nix 会输出一个配方,输入名为“base”和“aeson”的东西,并间接将它们传递给 mkDerivation。我认为 mkDerivation 太笼统了,无法特别了解 Haskell,那么这个映射可能在哪里呢?