使用堆栈时如何在.cabal中查找依赖项

时间:2018-12-28 06:25:26

标签: 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

1 个答案:

答案 0 :(得分:2)

那些依赖项未包含在堆叠的软件包集中(您可以在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约束,也许您出于某种原因添加了约束?

如果不是这样,您可以尝试构建它,从阴谋集团文件中删除约束,并使用此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能够以原始约束构建软件包,而无需进一步配置(尽管它选择了不同版本的lib)。