gim*_*and 8 haskell ghci cabal libraries cabal-install
我正在尝试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.
Run Code Online (Sandbox Code Playgroud)
其中,在这种情况下,scratch.hs
要进口Data.Aeson.Generic
,但aeson
不是我的图书馆build-depends
(很恰当),但是是在我的用户软件包数据库.
那么我该如何解决这个问题呢?我可以想象这两个类别中的答案,但也许我错过了一些类别:
一种(有选择地)使用我的用户包数据库中的包与创建的沙箱相结合的方法cabal-dev
.(也许滚动我自己的cabal-dev ghci
样式脚本?)
关于如何改进我的工作流程以便问题消失的建议.
我知道我可以全局安装软件包,但我不愿意以这种方式污染我的全局软件包数据库(并cabal-dev
明确地阻止这种情况).
非常感谢所有建议.
我认为最简单的解决方案就是将所需的东西安装到沙箱中.例如,如果您需要aeson用于交互式脚本:
~/myproject$ cabal-dev install aeson
~/myproject$ cabal-dev ghci
Run Code Online (Sandbox Code Playgroud)
然后:set -package aeson
应该工作ghci
.
如果这不合适,您需要在用户包数据库中使用许多依赖项,并且不需要ghci
使用cabal文件设置用于调用的其他标志来调用ghc
,那么您可以调用非沙盒ghci
访问来自沙箱以及用户和全局包的包.例如(对于GHC 7.0.3):
~/myproject$ GHC_PACKAGE_PATH=./cabal-dev/packages-7.0.3: ghci
Run Code Online (Sandbox Code Playgroud)
(注意结尾处的冒号GHC_PACKAGE_PATH
和它之间的空格ghci
.)
归档时间: |
|
查看次数: |
1666 次 |
最近记录: |