Cabal安装的模块不会导入

时间:2015-07-21 00:33:26

标签: haskell ghc cabal

我在这里有几件事情让我感到困惑,所以我会尽可能清楚地解释每一件事。

我一直在尝试使用cabal安装haskell的diagrams软件包。 I've seen it suggested使用沙箱安装软件包,这就是我所做的。我不清楚的一点是沙箱的确切含义 - 我知道我可以用cabal sandbox init初始化一个沙箱并用cabal install在其中安装软件包,但我不知道了解如何在安装后使用这些软件包。

然后我尝试使用ghc编译测试脚本,这导致以下错误:

diagramstutorial.lhs:3:10:
    Could not find module 'Diagrams.Prelude'
    Use -v to see a list of the files searched for.

对于脚本应该加载的另一个模块有类似的错误。这些模块肯定都包含在图表包中,并且cabal似乎很高兴正确安装了包。我希望有一些简单的东西,我只是不明白,但我不知道它是什么。

2 个答案:

答案 0 :(得分:2)

  

我输入ghc --make diagramstutorial.lhs来编译它

这将使GHC使用常规用户包数据库(即不是沙箱)。请改用cabal exec -- ghc --make diagramstutorial.lhs,以便GHC在沙盒的上下文中运行。

您还可以使用cabal repl在沙盒中使用GHCi。当然,如果/当您开始准备cabal包时,如果您在其目录中,则所有cabal命令(cabal build等)都将使用沙箱。

  

我不清楚的一点是沙箱是什么

一组包含目录本地数据库的数据包。除cabal.sandbox.config配置文件外,还有一个隐藏目录.cabal-sandbox,其中diagrams和您安装的其他软件包位于其中。

答案 1 :(得分:1)

  1. 找到沙箱目录,找到packages.conf.d文件。 例如,/home/user/.cabal-sandbox/x86_64-linux-ghc-7.8.4-packages.conf.d

  2. 使用package-db标志重新运行GHC命令:

    ghci -package-db /home/user/.cabal-sandbox/x86_64-linux-ghc-7.8.4-packages.conf.d --make diagramstutorial.lhs

  3. 现在一切都应该有效