2

我正在尝试使用 Snap Web 框架开始一个新项目。我曾经snap init让我的基本骨架工作。我还将http://www.stackage.org/lts/cabal.config放在我的 .cabal 文件旁边。我没有取消注释以专门使用 Stackage。所以我尝试构建,但失败了,找不到lens我的 .cabal 文件所需的版本。Stackage 中的 cabal.config 文件指定的镜头版本与我的 .cabal 文件中的版本不同。因此,我从我的包列表中删除了所有约束,并照常cabal install --only-dep -j8 --enable-test进行,它奏效了!

但是,我一直被告知包版本应该受到限制。那么在使用 Stackage 时,是否可以不受限制地保留包版本?我应该将我的包裹降级为 Stackage 中可用的包裹吗?

据我了解,cabal.config 文件指定了一组依赖项,其中包含满足依赖项的特定版本,那么 Stackage 是如何工作的呢?它只是被证明是兼容的 Hackage 软件包的一个子集吗?他们是托管自己的软件包还是依赖 Hackage 进行下载?

提前致谢 :)

4

1 回答 1

1

这两个选项都可用。默认选项是您所做的,并且仍然会去 hackage 获取软件包。您刚刚向您的 cabal 添加了一个过滤器,该过滤器阻止您使用 Stackage 中包含的任何版本的包,该版本未经测试可与所有其他包一起使用。

另一种选择是简单地将你的 cabal repo 指向一个 Stackage url,然后你将直接从 Stackage 服务器下载包。该服务器将只提供已知可以协同工作的包,因此您的 cabal 文件中不需要额外的约束。我其实更喜欢这种工作方式。

在这两种情况下,如果您的 cabal 文件中有与 Stackage 限制不兼容的其他约束,您的构建将失败。如果你使用第一个选项,你会得到依赖冲突。当使用第二个选项时,Stackage 服务器将简单地报告它没有那个特定的包/版本。

于 2015-02-03T20:11:34.547 回答