我正在为我正在进行的项目尝试cabal-dev
;该项目是一个库,cabal-dev
在构建沙盒版本方面做得很好 - 但我的部分工作流程出现问题......
我有一个脚本scratch.hs
,我会在cabal-dev
加载ghci
来尝试填充。当然,scratch.hs
的内容会随着时间的推移而改变,具体取决于我正在处理的功能。 scratch.hs
不是库代码库的一部分,它只是我个人的临时空间,而我正在研究它。
现在,为了加载我的沙箱的ghci
会话,我可以cabal-dev ghci
,然后加载scratch.hs
。问题是这(通过设计,明智地)排除了我的用户包数据库,所以如果scratch.hs
引用不在我的库build-depends
的包中的模块(这不是不合理的 - 它不是毕竟,这些包是不可见的,所以我得到一个错误,如:
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
明确地不鼓励这样做。)
非常感谢所有建议。
答案 0 :(得分:8)
我认为最简单的解决方案就是将您需要的东西安装到沙盒中。例如,如果您需要aeson用于交互式脚本:
~/myproject$ cabal-dev install aeson
~/myproject$ cabal-dev ghci
然后:set -package aeson
应该适用于ghci
。
如果这不合适,那么您希望在用户包数据库中使用很多依赖项,并且不需要使用cabal文件设置用于调用{{}的其他标志来调用ghci
。 1}},然后您可以调用非沙盒ghc
来访问沙箱中的包以及您的用户和全局包。例如(对于GHC 7.0.3):
ghci
(请注意~/myproject$ GHC_PACKAGE_PATH=./cabal-dev/packages-7.0.3: ghci
末尾的冒号以及GHC_PACKAGE_PATH
之间的空格。)