Cabal 安装的模块不会导入

Cabal-installed Modules won't import

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

我一直在尝试使用 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.

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

I typed ghc --make diagramstutorial.lhs to compile it

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

您还可以通过 cabal repl 在沙箱中使用 GHCi。当然,if/when 你开始准备一个 cabal 包,如果你在它的目录中,所有 cabal 命令(cabal build 等)都会使用沙箱。

Something that's not clear to me is exactly what a sandbox is

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

  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

现在一切正常