使用 Stack 在 Haskell 项目中使用 gtk2hs-buildtool 库时出错

Getting error while using gtk2hs-buildtool library in Haskell project using Stack

我正在尝试将 gtk2hs-buildtool 的依赖项添加到我的 Haskell 项目,但在构建堆栈时出现以下错误。

In the dependencies for TicTacToe-0.1.0.0:
    gtk2hs-buildtools needed, but the stack configuration has no specified version  (latest matching
                      version is 0.13.5.4)
needed since TicTacToe is a build target.

TicTacToe.cabal 文件:

library
  exposed-modules:
      TicTacToeEngine
  other-modules:
      Paths_TicTacToe
  hs-source-dirs:
      src
  build-depends:
      base >=4.7 && <5,
      gtk2hs-buildtools
  default-language: Haskell2010

如果您使用的是 stack 工具,则不应触摸 <packagename>.cabal 文件。 stack 负责从 package.yaml 生成它。尽管修改 <packagename>.cabal 是一种常见的做法,但如果您不这样做,开发工作流程会更容易。

您感兴趣的文件(以及 stack 工具使用的文件)是 stack.yamlpackage.yaml

stack.yaml 中,您应该会看到一个名为 resolver: lts-XX.XX 的条目。这意味着您的依赖项版本得到管理,以便它们与给定的 lts (a.k.a. snapshot) 中的那些相匹配。您可以转到 https://www.stackage.org/,单击您的 lts 版本并搜索 gtk2hs-buildtools 包以获得适合您的项目的版本(例如:lts-12.26 使用 gtk2hs-buildtools-0.13.4.0).在您的 package.yaml 中,在 dependencies 部分写入条目条目 - gtk2hs-buildtools

lts-13.11及以上gtk2hs-buildtools在stackage中不可用,因此您需要将其添加为extra-dep。在 stack.yaml 部分的 extra-dep 部分添加以下条目 gtk2hs-buildtools-0.13.4.0(或您要使用的版本号)。然后添加 package.yaml 和条目 gtk2hs-buildtools。有必要在两个文件中添加条目。请参阅堆栈文档或了解原因。

为了确保您可以构建项目,您的文件应如下所示:

如果使用高于或等于 13.11

的解析器

stack.yaml

resolver: lts-13.11
extra-deps: 
 - gtk2hs-buildtools-0.13.4.0

package.yaml

dependencies:
 - base
 - gtk2hs-buildtools

如果使用低于 13.11

的解析器

stack.yaml

resolver: lts-12.26
extra-deps:

package.yaml

dependencies:
 - base
 - gtk2hs-buildtools