Haskell 内置库,它去哪儿了?

Haskell inbuilt libraries, where does it go?

在我的 /home/sk/.ghc/x86_64-linux-7.8.4/package.conf.d 文件夹中,有一个 bytestring 包的条目,

bytestring-0.10.6.0-7682cf7d45ee92d104399a67f3bce6ba.conf

在我的 /opt/ghc/7.8.4/lib/ghc-7.8.4/package.conf.d 文件夹中,有一个字节字符串条目,

bytestring-0.10.4.0-d6f1d17d717e8652498cab8269a0acd5.conf

为什么 haskell 将 bytestring 库存储在两个不同的地方。由于 type/version 不匹配,这会导致编译错误。

我如何确保在我的 ubuntu 14.04 机器上一次只存储和使用任何库的一个版本?

Why does haskell store bytestring libraries in two different places. This is leading to compilation errors due to type/version mis-match.

嗯,不。问题是您安装了两个版本的 bytestring 库。它们是否在同一个包数据库中并不重要。

你应该用 ghc-pkg unregister bytestring-0.10.6.0 解决这个问题(首先取消注册任何会破坏的包,如果有的话)然后添加一行

constraint: bytestring installed

给你的 ~/.cabal/config 以防止它再次发生。您可能希望对 GHC 附带的其他软件包执行相同的操作,至少是 ghc 软件包的所有依赖项(参见 ghc-pkg describe ghc)。

我不知道是否有办法告诉 cabal 永远不要安装 any 软件包的第二个版本。 (在实践中,我发现临时安装多个版本的软件包非常有用,我会发现它比有用更烦人。)