haskell - 使用堆栈时如何查找.cabal中的依赖项

标签 haskell haskell-stack

这些天我正在学习 Haskell。我在 Github 上有一个有趣的项目:https://github.com/tmishima/Hinecraft 我克隆它,我想自己构建它并运行它。但我遇到了这样的堆栈构建问题

Resolver 'lts-13.0' does not have all the packages to match your requirements.
FTGL not found
    - Hinecraft requires -any
GLUtil not found
    - Hinecraft requires -any
OpenGLRaw version 3.3.1.0 found
    - Hinecraft requires <=2.3.0.0

堆栈中似乎找不到这些依赖项,现在该怎么办?我应该手动下载这些依赖项并在本地构建它们吗? 感谢您的帮助。

.cabal 依赖项代码

build-depends:       
                 base , GLFW-b , OpenGL , mtl
                 , bytestring , array , vector , directory
                 , process , OpenGLRaw <= 2.3.0.0 , cereal , FTGL
                 , time , containers , GLUtil , linear , text
                 , sqlite-simple

最佳答案

这些依赖项不包含在堆栈的包集中(您可以在 https://www.stackage.org/lts-13.0 中检查它)。 但是,它们位于 hackage 存储库中(例如 http://hackage.haskell.org/packages/search?terms=GLUtil ),您可以使用它们创建堆栈,添加 extra-deps stack.yaml 中的部分配置文件:

resolver: lts-13.0
extra-deps:
  - FTGL-2.1
  - GLUtil-0.10.3
  - OpenGLRaw-2.3.0.0

我尚未测试构建,也许它可能会因依赖项不兼容而失败。

我尝试构建包,但上述配置不起作用。 actual cabal file没有OpenGLRaw <= 2.3.0.0约束,也许您出于某种原因添加了约束?

如果不是这样,您可以尝试构建它,从 cabal 文件中删除约束,并使用此 stack.yaml ,使用默认值 OpenGLRaw-3.3.1.0 :

resolver: lts-13.0
extra-deps:
  - FTGL-2.1
  - GLUtil-0.10.3

由于该软件包需要旧版本的 OpenGLRaw (2.3.0.0),我已经成功定义了一个使用该版本的配置文件,使用 lts-6.35 :

resolver: lts-6.35
extra-deps:
 - FTGL-2.1
 - GLURaw-1.4.0.2
 - GLUtil-0.8.8
 - hpp-0.3.1.0
 - OpenGL-2.13.0.0
 - OpenGLRaw-2.3.0.0

希望对你有帮助!

作为旁注,我必须提到 cabal能够使用原始约束构建包,无需进一步配置(尽管它选择了不同版本的库)。

关于haskell - 使用堆栈时如何查找.cabal中的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53954519/

相关文章:

haskell - 如何使 Stack 只构建一个可执行文件?堆栈构建 :exe1 doesn't work?

bash - 如何从 GHC/Cabal/Stack 获取错误和警告计数?

c++ - 为 haskell 堆栈项目编写静态 cpp 库

haskell - 避免 "sharing"的好方法?

haskell - 如何读取大的csv文件?

haskell - 使用 NoImplicitPrelude 重新绑定(bind)数字文字的语法

haskell - 带 Haskell 管道的有状态生成器

haskell - Yesod,如何从 Javascript/Julius 中的 JSON 数据生成类型安全链接

haskell - 无法定义多个可执行文件

haskell - 通过堆栈安装的 LTS 版本