昨天我了解了一个名为Stack的新Haskell工具.乍一看,看起来它与Cabal完全相同.那么,它们之间有什么区别?堆叠是Cabal的替代品吗?在哪些情况下我应该使用Stack而不是Cabal?什么可以堆栈做Cabal不能?
我如何告诉stack构建我的可执行文件及其所有依赖项-prof?
只需将它添加到ghc-options了在.cabal文件是不够的,因为它只是试图生成可执行文件与启用分析其失败.
使用cabal,我可以使用命令安装hakyll:
cabal install hakyll
Run Code Online (Sandbox Code Playgroud)
如何使用堆栈执行相同的操作?
haskell package-management cabal cabal-install haskell-stack
我想在Haskell项目中使用外部库RDFox.
上下文:我使用GHC 7.10和堆栈在64位上运行Windows和Linux .RDFox是用C++编程的.可以使用Java和Python包装器下载RDFox共享库(.dll,.so).
目的:我想在我的Haskell项目中重用RDFox(.dll,.so)中的编译库,因此我需要为RDFox创建一个Haskell包装器.
问题:对于Haskell来说相对较新,我很难知道从哪里开始.我找到了几个关于这个主题的页面(来自Haskell wiki和StackOverflow),但工作流程和配置对我来说并不清楚.
问题:我想知道:
- 如何配置堆栈和cabal以使用外部库,在Windows 或 Linux(不同的机器,相同的存储库)上构建.
- 如何在此外部库上配置GHCi以进行交互式测试.
- 将Python包装器转换为Haskell是最好的方法吗?我想避免分析RDFox C++代码.
情况是,我正在尝试使用Stack安装Netwire.但是,最新的netwire 5.0.1存在一个问题,正如dhobbs报道的那样:http://hub.darcs.net/ertes/netwire/issue/13
由于我不知道何时会解决问题,我下载了回购并自行进行了更改.但是,我不明白如何安装这样的本地修补版本.stack install没有安装到~/.stack.有没有人有想法?
更新
现在我正在使用Stack开发一些其他库.如何让另一个项目使用该库?硬编码相对路径看起来非常难看.
是否可以使用Haskell堆栈从github安装包的版本?
例如,在一个.cabal或一个stack.yaml文件中,如何在git repo/branch/revision中指向依赖?
我已经用Haddock样式注释了我的代码,并希望生成可浏览的文档.由于我也使用堆栈,我想将文档生成集成到工作流程中.但是,我还没有能够产生任何有用的东西.
我可以跑
stack haddock
Run Code Online (Sandbox Code Playgroud)
它将生成我想要的样式的文档(深入内部~/.stack/),但它似乎只生成我依赖的包的文档,而不是我自己的代码.
我跑的时候
stack haddock --help
Run Code Online (Sandbox Code Playgroud)
我得到的印象是,我可以使用附加参数--haddock为我自己的项目生成文档,并--no-haddock-deps省略我的依赖项的文档.但是,当我跑
stack haddock --haddock --no-haddock-deps
Run Code Online (Sandbox Code Playgroud)
似乎什么也没发生.如果我stack clean首先它将重新编译我的所有代码,但没有生成输出,似乎以任何方式与文档相关.
作为一个中间解决方案,我也试过自己运行Haddock,即
haddock my-source.hs
Run Code Online (Sandbox Code Playgroud)
但后来我得到一个错误,它无法找到文件依赖的模块(由堆栈本地安装).这让我觉得文档生成必须以某种方式通过堆栈.我已经找了,但没有真正找到任何与配置文档.cabal和stack.yaml文件相关的解释.
TL; DR
如何使用stack和Haddock为我自己的包中的代码生成文档?
我想了解如何使用stack和stackage.org.当我第一次安装并使用它时,stackage.org是在LTS-3.8("解析器").从那以后,stackage.org现在有了LTS-3.11.
首先,我想确认一下这意味着什么.Stackage是一个包的存储库,对于特定的LTS版本(例如3.8),包已经被验证可以一起工作.所以LTS-3.8的包装一起工作,LTS-3.11的包装也一起工作.继续 ...
当我跑步时stack new projectname,堆栈告诉我:
Checking against build plan lts-3.8
Selected resolver: lts-3.8
Run Code Online (Sandbox Code Playgroud)
这是否意味着该项目已设置为仅使用在LTS-3.8下验证的软件包和版本?
如果我现在想要启动一个新项目并希望在新项目中使用最新的LTS版本,我如何告诉堆栈默认执行此操作?
如果我想"升级"旧项目以使用新的LTS版本呢?
如何使用堆栈工具卸载全局安装的Haskell软件包?
stack --help 显示不推荐使用uninstall命令.
uninstall DEPRECATED: This command performs no actions, and is
present for documentation only
Run Code Online (Sandbox Code Playgroud) 堆栈失败并显示 404 HTTP 状态,无法下载 lts-14.1 的构建计划:
$ stack new my-project
[...]
Downloading lts-14.1 build plan ...
RedownloadInvalidResponse Request {
host = "raw.githubusercontent.com"
port = 443
secure = True
requestHeaders = []
path = "/fpco/lts-haskell/master//lts-14.1.yaml"
queryString = ""
method = "GET"
proxy = Nothing
rawBody = False
redirectCount = 10
responseTimeout = ResponseTimeoutDefault
requestVersion = HTTP/1.1
}
"/home/michid/.stack/build-plan/lts-14.1.yaml" (Response {responseStatus = Status {statusCode = 404, statusMessage = "Not Found"}, responseVersion = HTTP/1.1, responseHeaders = [("Content-Security-Policy","default-src 'none'; style-src 'unsafe-inline'; sandbox"),("Strict-Transport-Security","max-age=31536000"),("X-Content-Type-Options","nosniff"),("X-Frame-Options","deny"),("X-XSS-Protection","1; mode=block"),("X-GitHub-Request-Id","10DA:4457:1D507:285B9:5D55DA2D"),("Content-Length","15"),("Accept-Ranges","bytes"),("Date","Thu, 15 …Run Code Online (Sandbox Code Playgroud)