我正在尝试使用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
,但我的库的build-depends
中没有aeson
(这是很正确的),但是在我的用户包数据库中有aeson
。那么我该如何解决这个问题呢?我可以想象以下两种解决方案,但也许还有其他的方案:
- 以某种方式(有选择地)使用来自我的用户包数据库的软件包,并与由
cabal-dev
创建的沙盒一起使用。(也许是编写自己的cabal-dev ghci
风格的脚本?) - 提供一个改进工作流程的建议,使问题消失。
cabal-dev
明确反对这样做)。非常感谢您的所有建议。
.ghci
中并使其自动发生。感谢,Daniel! - gimboland