首页 文章

Stackage包含或独占使用

提问于
浏览
2

我正在尝试使用Snap Web框架启动一个新项目 . 我用 snap init 让我的基本骨架工作 . 我还把http://www.stackage.org/lts/cabal.config放在我的.cabal文件旁边 . 我没有't uncomment the line to use Stackage exclusively. So I tried to build and it failed and couldn'找到我的.cabal文件所需的 lens 版本 . Stackage的cabal.config文件指定的镜头版本与我的.cabal文件中的版本不同 . 所以我删除了我的包列表中的每个约束,并通常 cabal install --only-dep -j8 --enable-test 并且它有效!

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

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

提前致谢 :)

1 回答

  • 1

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

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

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

相关问题