1

我正在尝试加载我的 .hs 文件,但是当我加载时import Data.Numbers.CReal,它给了我错误Failed to load interface for 'Data.Numbers.CReal'。我已经跑了cabal install numbers,如果我cabal list --installed出现了 pkg 号码,但如果我ghc-pkg list没有出现(如果我ghc-pkg check它给出了很多黑线鳕警告)。它与我的非加载文件有关吗?我该如何解决这个问题?

附言。我知道如何导入包,但我不确定我是否正确导入了这个包。

谢谢,对不起,如果我没有正确解释自己。

4

2 回答 2

3

两个假设浮现在脑海:

  1. cabal正在选择ghc与您的 shell 不同的版本及其相关工具套件。您可以通过运行以下两个命令来检查这种差异:

    cabal exec -- ghc --version
    ghc --version
    

    他们说同样的话吗?如果是这样,拒绝这个假设。否则,您应该决定是更喜欢 shell 的选择还是 cabal 的选择(我建议您更喜欢 shell 的选择)。

    如果您更喜欢的选择,您可以通过附加到命令cabal来使用特定版本的 GHC(和其他 GHC 工具) ;-<version>例如,尝试ghc-pkg-7.10.3 list查看版本 7.10.3 的包数据库中的内容,或者ghci-7.10.3运行特定版本的 REPL。您可以通过添加符号链接或类似于您的PATH.

    如果你更喜欢你的 shell 的选择,你可以要求cabal使用那个版本的cabal configure -w ghc; 或者如果你担心cabal你的 shell 会以ghc不同的方式解析,你可以要求一个具有cabal configure -w ghc-7.10.3或类似的特定版本。

  2. 你的 shell 同意使用cabal什么版本的 GHC,但是你在一个 cabal 沙箱中。cabal list --installed告诉您沙箱中安装了什么,但ghc-pkg list告诉您用户包数据库中安装了什么。您可以检查这两个命令之间的差异:

    cabal exec -- ghc-pkg list numbers
    ghc-pkg list numbers
    

    (如果你有一个新的阴谋集团——不确定它出现在哪个版本中——你也可以尝试cabal hc-pkg list代替cabal exec -- ghc-pkg list. 这可能是更向前兼容的方式,所以养成一个好习惯。)

    如果这些打印相同的东西,拒绝这个假设。否则,您应该决定是否要继续使用沙盒(我建议继续使用沙盒)。

    如果你想停止使用沙盒,你可以传递--ignore-sandboxcabal. 要使其永久化,请查看cabal.sandbox.config文件,该文件将包含指向实际沙箱的指针(通常为.cabal.sandbox)。删除配置和沙箱。你也可以通过添加ignore-sandbox: True到你的全局忽略沙箱~/.cabal/config,但我强烈建议不要这样做。

    如果要保留沙箱,则需要使用cabal exec所有 GHC 工具套件,以确保选择了正确的包数据库。例如,尝试cabal exec ghci运行可以访问沙箱包数据库的 REPL。

这些假设并不相互排斥:两者都可能发生。在这种情况下,我强烈建议选择最终解决方案(“cabal exec用于所有 GHC 工具套件执行”),因为它可以透明地处理这两个问题:标准 GHC 工具套件命令将被重写以引用显式版本化的命令(例如cabal exec ghc,将实际执行ghc-7.10.3)和环境将设置为指向正确的包数据库。

于 2017-10-19T20:46:47.033 回答
0

这个问题的答案

您可以通过运行以下两个命令来检查这种差异:

cabal exec -- ghc --version ghc --version

他们说同样的话吗?

是的。我不记得第二个选项,但我已经设法自己解决了。我具体做的是:

  1. 运行命令“rm -rf .cabal”(不带逗号)删除 cabal 配置。
  2. 运行“rm -rf .cabal-sandbox”
  3. 运行“rm -rf .ghc”
  4. cabal new-build cabal(不确定这是否有帮助)
  5. 在管理员模式 (sudo) 下,我编辑了 cabal 配置文件并将 Ignore Sandbox 更改为 True -->这将来会给我带来问题吗?我应该把它改回假吗?请回答
  6. 不得不删除给一些麻烦的 cabal.sandbox.config
  7. 阴谋集团安装 阴谋集团安装
  8. 阴谋集团更新

现在 ghc-pkg list 命令和 cabal list --installed 显示了我安装的两个包,它们可以正常工作。

附言。我提供了该过程的详细信息,以防将来有人需要。仍然不确定是什么原因导致 cabal 和 ghc 没有显示相同的 pkg。

于 2017-10-20T18:48:45.777 回答