使用ghc-pkg列表和cabal列表 - 已安装给出不同的列表

时间:2017-10-19 16:49:47

标签: haskell cabal cabal-install ghc-pkg

我正在尝试加载我的.hs文件但是当我 @media (max-width: 360px) { .how-it h1 {font-size: 16px; !important;} } 时,它会给我错误import Data.Numbers.CReal。我已经运行了Failed to load interface for 'Data.Numbers.CReal',如果我cabal install numbers出现了数字pkg,但是如果我cabal list --installed它没有(如果我ghc-pkg list那么它会给出很多黑线鳕警告)。它与我的非加载文件有关吗?我该如何解决这个问题?

聚苯乙烯。我知道如何导入包,但我不确定我是否正确导入这个包。

如果我没有正确解释自己,请感谢和抱歉。

2 个答案:

答案 0 :(得分:1)

两个假设让人想起:

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

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

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

    如果您更喜欢cabal的选择,可以通过在命令中附加-<version>来使用特定版本的GHC(以及其他GHC工具);例如尝试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-sandbox传递给cabal。要使其永久化,请查看cabal.sandbox.config文件,该文件将包含指向实际沙箱的指针(通常为.cabal.sandbox)。删除配置和沙箱。您也可以通过向ignore-sandbox: True添加~/.cabal/config来全局忽略沙箱,但我强烈建议不要这样做。

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

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

答案 1 :(得分: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 - &gt; 这会给我带来未来的问题吗?我应该把它改回假吗?请回答
  6. 必须删除一个带来麻烦的cabal.sandbox.config
  7. cabal install cabal-install
  8. cabal update
  9. 现在ghc-pkg list命令和cabal列表 - 已安装显示我已安装的软件包,它们可以顺利运行。

    聚苯乙烯。我提供了该过程的详细信息,以防将来有人需要。仍然不确定是什么导致了这个阴谋和ghc没有显示相同的pkgs。