Stackage包含或独占使用

时间:2015-02-03 18:57:12

标签: haskell stackage

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

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

据我所知,cabal.config文件指定了一组具有满足依赖关系的特定版本的依赖项,那么Stackage如何工作?它只是Hackage中被证明兼容的软件包的子集吗?他们是否拥有自己的软件包或依靠Hackage进行下载?

提前致谢:)

1 个答案:

答案 0 :(得分:1)

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

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

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

相关问题