首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构建Spock教程示例失败

构建Spock教程示例失败
EN

Stack Overflow用户
提问于 2020-04-11 08:40:37
回答 1查看 367关注 0票数 1

我想使用Haskell一点,因此我看了一下Spock框架。为了开始清理,我从我的Arch机器卸载了所有Haskell相关的东西,并使用各自网站上的安装脚本安装了ghcup、Cabal和Stack。

现在我想跟着斯波克教程。按照建议,尝试用cabal install Spock全局安装Spock会给我一个错误(缩写):

代码语言:javascript
复制
src/Web/Spock/Internal/Wire.hs:43:1: error:
    Could not find module ‘Web.Routing.AbstractRouter’
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
   |
43 | import Web.Routing.AbstractRouter
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cabal: Failed to build Spock-0.9.0.1. See the build log above for details.

我已经在关于这个主题的reddit上找到了一个问题,但是这个解决方案并不适用,因为我并不试图按照隐含的方式使用特定版本的库。

所以我试着跟着做,只在本地建造。但是,当我到达它说的stack build --fast --pedantic时,构建计划就无法构建,Stack建议添加另一个依赖项stm-containers。为此,我将为focusprimitive提供两个额外的建议。当我添加这些内容时,计划再次失败,这一次没有一个简单的解决方案:

代码语言:javascript
复制
In the dependencies for primitive-0.6.4.0:
    base-4.13.0.0 from stack configuration does not match >=4.5 && <4.13  (latest matching version is 4.12.0.0)
needed due to Spock-example-0.1.0.0 -> primitive-0.6.4.0

我可以用Haskell做点小事情,但是有了构建系统,我就离开了我的舒适区。感谢你的帮助和暗示。哦,当然所有版本都是这篇文章发布之前的最新版本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-11 15:30:25

由于依赖项的不兼容版本,Spock不会使用GHC8.8和更高版本进行构建。在史波克第149期中也描述了一个类似的问题,尽管我不能完全确定它是否完全相同。您从Stack获得的错误提示了这一点,因为base-4.13.0.0是与GHC8.8捆绑在一起的base版本。阴谋安装以一种更模糊的方式失败了,因为在注意到不兼容性之后,它试图使用较早版本的Spock来解决依赖关系,最终选择0.9.0.1,尝试并由于重新路由依赖项缺少版本上限而未能构建它。

(这个答案发布后不久,缺失的上限版本,所以现在试图重现问题将导致一个更容易理解的失败。)

抛开本教程不谈,考虑到这些复杂情况,使用Spock最直接的方法可能是通过阴谋安装3+。首先使用ghcup切换到GHC 8.6.5:

代码语言:javascript
复制
$ ghcup install 8.6.5
$ ghcup set 8.6.5

然后,创建一个带有阴谋安装的空白项目:

代码语言:javascript
复制
$ mkdir myproject
$ cd myproject
$ cabal init

将Spock添加到myproject.cabalmyproject.cabal部分

代码语言:javascript
复制
  build-depends:       base >=4.12 && <4.13
                     , Spock == 0.13.*

最后,您可以运行:

代码语言:javascript
复制
$ cabal build

它将在构建项目之前安装Spock及其依赖项。(请注意,您通常不需要使用cabal install来安装带有cabal 3的库。)

通过切换到lts-14.27解析器(使用GHC8.6.5的最新版本)、跟踪所有需要覆盖的依赖版本(就像您开始做的那样),并手动将它们添加到extra-deps of stack.yaml中,也可以使它与Stack一起工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61154102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档