Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 我可以将自定义包链接放到stack.yaml吗?_Haskell_Haskell Stack_Hackage_Stackage - Fatal编程技术网

Haskell 我可以将自定义包链接放到stack.yaml吗?

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

为了打印漂亮的垂直树,我搜索了谷歌,找到了一个软件包

我想导入此软件包,但问题是:

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 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.tar.gz
  • 将其解压缩到我的项目文件夹
  • 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”。