2

尝试通过以下方式安装 happstack 时

$ stack install happstack

我收到以下错误:

    Run from outside a project, using implicit global project config
Using resolver: lts-7.2 from implicit global project's config file: /Users/matthewherzl/.stack/global-project/stack.yaml

While constructing the build plan, the following exceptions were encountered:

In the dependencies for happstack-7.0.2:
    happstack-server-7.4.6.2 must match >=7.0 && <7.4 (latest applicable is 7.3.9)

Plan construction failed.

看起来 happstack 需要一个比最新版本更旧的 happstack-server。我应该如何处理这个问题?


我考虑过的潜在修复:

  1. 在我的系统上手动更改 happstack 的配置,允许它依赖于最新版本的 happstack-config,并假设它可以。
  2. 安装旧版本的 happstack-config。
  3. 找到 happstack 源代码库,验证它是否适用于最新版本的 happstack-config,更新配置以允许它依赖于最新版本,并将配置更改的拉取请求提交到 happstack 的中央仓库。

我不知道如何做这些,特别是#3听起来很有挑战性。

4

1 回答 1

3

我首先假设您知道 Hackage 和 Stackage 之间的区别。如果不是这种情况,请告诉我,以便我可以在答案中进行解释。

如果您转到LTS 7.2 的 Stackage 页面(全局配置使用的解析器/快照),您将看到包happstack不在该快照的包中。然后,如果您查看happstack包的Hackage 文档,您会看到一条说明,说明它“已弃用以支持 happstack-server”。既然如此,您所要做的就是安装happstack-server而不是happstack. (对于这种情况的一般建议是始终检查 Hackage 和/或 Stackage 中的文档,因为它可以更清楚地了解正在发生的事情,以及可能导致您遇到麻烦的包版本和依赖项的额外信息。 )


关于您想到的三个替代方案的几句话。如果您有一个旧包,只需要进行微不足道的更改(例如,碰撞依赖边界 - 如果更改更加实质性,那么您最好寻找一个旧的、兼容的快照)以使用最近的 Stackage 快照构建,方法 #1和#3 不仅是好主意,而且得到 Stack 的明确支持。如堆栈文档中所述(查找packages,extra-depextra-deps选项),您可以配置您的项目,而不是使用 Stackage 快照中的默认版本,而是使用来自例如 Hackage、本地 Git 存储库或远程 Git 存储库的不同版本。如果您需要执行 #3 来调整某些包,您甚至不需要等待上游接受您的拉取请求——只需配置 Stack 以从 GitHub 或其他地方的 fork 中拉取依赖项。

于 2016-10-19T22:26:43.963 回答