2

我是 Haskell 的新手,正在使用 Stack 在 Mac OSX 上构建一个小型个人项目。我最近在我的 cabal 文件中添加了一些新的 build-deps,但是现在当我运行时stack build,我收到以下错误:

--  While attempting to add dependency,
    Could not find package api-builder in known packages

--  Failure when adding dependencies:
      api-builder: needed (==0.11.0.0), not present in build plan (latest applicable is 0.11.0.0)
      http-client: needed (==0.4.20), 0.4.27 found (latest applicable is 0.4.20)
      http-types: needed (==0.8.6), 0.9 found (latest applicable is 0.8.6)
    needed for package: music-haskell-0.1.0.0

Recommended action: try adding the following to your extra-deps in /Users/.../src/music-haskell/stack.yaml
- api-builder-0.11.0.0

You may also want to try the 'stack solver' command

当我运行时,stack solver我收到有关 http-types 包的错误

cabal: Could not resolve dependencies:
trying: music-haskell-0.1.0.0 (user goal)
next goal: http-types (dependency of music-haskell-0.1.0.0)
rejecting: http-types-0.9 (conflict: music-haskell => http-types==0.8.6)
rejecting: http-types-0.8.6, 0.8.5, 0.8.4, 0.8.3, 0.8.2................
(global constraint requires ==0.9)
Dependency tree exhaustively searched.

据我了解,看起来我已经安装了http-types-0.9,但现在我需要http-types-0.8.6. 我最初尝试使用 手动安装它$stack install http-types,但出现以下错误:

Error parsing targets: Specified target version 0.8.6 for package http-types does not match snapshot version 0.9

当我查看是否可以这样做$ stack uninstall但看起来已被弃用时。

我怎样才能摆脱快照/全局目标http-type

4

1 回答 1

3

您可以通过 extra-deps 覆盖 stack.yaml 文件中的特定快照包,例如:

extra-deps:
- http-types-0.8.6

一旦你开始包含与你使用的快照有冲突的版本界限的包,你很快就会遇到这些问题。我推荐的解决方案是:

  • 要求包维护人员将他们的包放入 Stackage,这样您就不必手动修改版本
  • 尽可能坚持使用 Stackage 中的包裹

即使您不是作者,您也可以自己将包添加到 Stackage。有关说明,请参阅维护者指南

于 2016-02-14T14:24:24.520 回答