Haskell 我可以将自定义包链接放到stack.yaml吗?
为了打印漂亮的垂直树,我搜索了谷歌,找到了一个软件包 我想导入此软件包,但问题是: Stackage LTS似乎不包括此包 因此,当我将Haskell 我可以将自定义包链接放到stack.yaml吗?,haskell,haskell-stack,hackage,stackage,Haskell,Haskell Stack,Hackage,Stackage,为了打印漂亮的垂直树,我搜索了谷歌,找到了一个软件包 我想导入此软件包,但问题是: Stackage LTS似乎不包括此包 因此,当我将pretty tree添加到package.yaml和stack build时,它会提示 In the dependencies for quick-sort-0.1.0.0: pretty-tree needed, but the stack configuration has no specified version (latest matchin
pretty tree
添加到package.yaml
和stack build
时,它会提示
In the dependencies for quick-sort-0.1.0.0:
pretty-tree needed, but the stack configuration has no specified version (latest matching version is 0.1.0.0)
needed since quick-sort is a build target.
Some different approaches to resolving this:
* Recommended action: try adding the following to your extra-deps in E:\work-category-theory\quick-sort\stack.yaml:
- pretty-tree-0.1.0.0@sha256:49b0e17008f9d30328db2bcc2958f3a7b78d154d2335c2dbaa2073e237b524ae,668
我将此修订添加到stack.yaml
:
extra-deps:
- pretty-tree-0.1.0.0@sha256:49b0e17008f9d30328db2bcc2958f3a7b78d154d2335c2dbaa2073e237b524ae,668
这个问题解决了,我可以顺利地完成
问题是:
pretty-tree-0.1.0。0@sha256:49B0E17008F9D30328DB2BC2958F3A7B78D154D2335C2DBA2073E237B524AE,688
,从哪里来
堆栈文件说
额外dep
此字段允许您在快照中定义的内容(在上面提到的解析器字段中指定)之上指定额外的依赖项。这些依赖项可能来自本地文件路径或餐具室包位置
对于本地文件路径情况,应用与应用于包相同的相对路径规则
餐具室包位置允许您包含来自三种不同来源的依赖项:
黑客
存档(tarball或zip文件,本地或通过HTTP)
Git或Mercurial存储库
但我不知道什么是餐具室pretty-tree-0.1.0.0
添加到stack.yaml
https://hackage.haskell.org/package/pretty-tree-0.1.0.0/pretty-tree-0.1.0.0.tar.gz
直接到stack.yaml
?例如:
extra-deps:
- url: https://hackage.haskell.org/package/pretty-tree-0.1.0.0/pretty-tree-0.1.0.0.tar.gz
extra-deps:
- url: https://hackage.haskell.org/package/pretty-tree-0.1.0.0/pretty-tree-0.1.0.0.tar.gz
我尝试了一下,堆栈提示出现错误:
对不起,因为我对Haskell生态系统不是很熟悉,这个问题可能很傻
谢谢
编辑: 我发现如果我第一次使用
extra-deps:
- pretty-tree-0.1.0.0@sha256:49b0e17008f9d30328db2bcc2958f3a7b78d154d2335c2dbaa2073e237b524ae,668
然后回滚到
extra-deps:
- url: https://hackage.haskell.org/package/pretty-tree-0.1.0.0/pretty-tree-0.1.0.0.tar.gz
错误消失了,但我不知道为什么
pretty-tree-0.1.0。0@sha256:49B0E17008F9D30328DB2BC2958F3A7B78D154D2335C2DBA2073E237B524AE,688
,从哪里来pretty tree
是包名,0.1.0.0
是您正在使用的版本,49B0E17008F9D30328DB2BC2958F3A7B78D154D2335C2DBA2073E237B524AE
是包的阴谋文件的SHA256散列,688
是阴谋文件的大小。(来源:)实际上,您只需要包含pretty-tree-0.1.0.0
位;其余部分是不必要的,但如果确实包含了它,Stack会将其用于验证目的,通过检查每次总是下载相同的包来确保构建是可复制的
但我不知道什么是餐具室
Pantry只是Stack用来指定堆栈版本的内部组件。为了使用Stack,您不需要知道什么是餐具室或者它是如何工作的,但如果您感兴趣,您可以参考以获得更多信息
还有另一种解决此问题的方法…下载pretty-tree-0.1.0.0.tar.gz
我不知道您为什么要这样做:这几乎就是Stack安装软件包所要做的,但如果您手动安装,则会有更大的机会将其搞糟 我可以添加此链接吗
https://hackage.haskell.org/package/pretty-tree-0.1.0.0/pretty-tree-0.1.0.0.tar.gz
是否直接到stack.yaml
同样,我也不完全明白为什么要这样做,因为当您指定pretty-tree-0.1.0.0
时,Stack会从这个位置下载包。但令人惊讶的是,事实证明,如果你真的愿意,你确实可以做到这一点!使用,似乎可以执行以下操作:
extra-deps:
- url: https://hackage.haskell.org/package/pretty-tree-0.1.0.0/pretty-tree-0.1.0.0.tar.gz
extra-deps:
- url: https://hackage.haskell.org/package/pretty-tree-0.1.0.0/pretty-tree-0.1.0.0.tar.gz
(未经测试,但这应该有效。如果不行,您可能需要根据链接文档添加一个
子目录:
部分。)为什么要这样做?添加pretty-tree-0.1.0.0
是最好的方法。@Erich因为我不熟悉Haskell生态系统,我想知道最佳实践。好的,那么我告诉你添加pretty-tree-0.1.0.0
是最佳实践。是的,这是最好的方法,它是堆栈的一个内部组件,用于指定包版本。请参阅以了解更多详细信息。“我不知道您为什么要这样做:这与Stack安装软件包所做的几乎完全相同,但如果您手动执行,则会有更大的机会将其搞糟。”我认为这种方法的优点是,我们可以修改pretty tree
的源代码。当然,这是另一个故事。@chansey有趣的一点!我没想到。但是,如果您想修改源代码,有一种更简单的方法:git clone
(或其他类似方法)将pretty tree
的代码添加到另一个目录,修改那里的代码,并添加指向该目录的额外dep
。更简单,而且它不需要您弄乱堆栈的内部结构https://hackage.haskell.org/package/pretty-tree-0.1.0.0/pretty-tree-0.1.0.0.tar.gz到stack.yaml中的额外部门:
,但正如我在问题中提到的那样失败。无论如何,这现在不是问题了。@chansey我刚刚看到了那个错误,它看起来很不寻常。我建议将其作为堆栈问题提交到上。我没有添加指向该目录的额外dep:
。我将“pretty-tree-0.1.0.0”添加到stack.yaml中的packages:
。(pretty-tree-0.1.0.0是pretty-tree-0.1.0.0.tar.gz
的解压文件夹)。我没有测试您的方法,即“添加指向该目录的额外dep”。