【发布时间】:2011-09-15 14:08:32
【问题描述】:
我正在为我正在进行的项目尝试cabal-dev;该项目是一个库,cabal-dev 在构建它的沙盒版本方面做得很好 - 但我的部分工作流程遇到了麻烦......
我有一个脚本scratch.hs,我将把它(cabal-dev 之前的)加载到ghci 中进行尝试。当然,scratch.hs 的内容会随着时间的推移而变化,这取决于我正在处理的功能。 scratch.hs 不是库代码库的一部分,它只是我在处理它时的个人暂存空间。
现在,为了在我的沙盒加载后获得ghci 会话,我可以只使用cabal-dev ghci,然后将scratch.hs 加载到其中。问题是这(通过设计,并且明智地)排除了我的用户包数据库,所以如果scratch.hs 引用了不在我的库的build-depends 中的包中的模块(这不是不合理的 - 它不是库的一部分all),这些包是不可见的,所以我得到一个错误,例如:
scripts/scratch.hs:8:8:
Could not find module `Data.Aeson.Generic':
It is a member of the hidden package `aeson-0.3.2.11'.
Perhaps you need to add `aeson' to the build-depends in your .cabal file.
Use -v to see a list of the files searched for.
Failed, modules loaded: none.
在这种情况下,scratch.hs 想要导入 Data.Aeson.Generic 但aeson 不在我的库的build-depends 中(非常正确),但在我的用户包数据库中是。
那么我该如何解决这个问题?我可以想象这些类别中的任何一个的答案,但也许有些类别我错过了:
一种(有选择地)将我的用户包数据库中的包与
cabal-dev创建的沙箱结合使用的方法。 (也许滚动我自己的cabal-dev ghci样式脚本?)关于如何改进我的工作流程以便问题消失的建议。
我知道我可以在全球范围内安装软件包,但我不愿意以这种方式污染我的全球软件包数据库(cabal-dev 明确反对这种做法)。
非常感谢所有建议。
【问题讨论】:
-
我想知道...你能在 ghci 中设置 -package 吗? (或者选择您的包数据库的选项名称是什么?)
-
打额头——我怎么没想到呢?是的,这行得通-谢谢。我什至可以将它添加到
.ghci并让它自动发生。谢谢,丹尼尔! -
糟糕,撒个谎。不,那行不通。它似乎更早地工作,但那是因为我的项目的测试套件使用 aeson,所以它在我的 .cabal 文件中被引用,因此被引入沙箱,但似乎没有被隐式加载
cabal-dev ghci,这就是为什么我需要:set -package aeson来加载它。如果我删除它,那么实际上:set -package aeson不 加载用户包数据库版本(“cannot satisfy -package aeson”),所以我回到了我开始的地方(除了看过这个的每个人最近 3 小时内的页面认为问题已解决)。 -
查看GHC手册,原来我说的flag是-package-conf,而不是-package。但是,我只是测试了它,这似乎也不起作用。对不起。
标签: haskell libraries cabal ghci cabal-install