"Could not resolve dependencies" 由于 MonadCatchIO-变形金刚而与 cabal

"Could not resolve dependencies" with cabal due to MonadCatchIO-transformers

我正在尝试构建一个包以使用 propellor 进行部署,但由于依赖性问题甚至无法对其进行配置。

这是我收到的错误消息:

$ cabal new-configure
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: prod-0.0.1 (user goal)
trying: base-4.9.1.0/installed-4.9... (dependency of prod-0.0.1)
trying: transformers-0.5.2.0/installed-0.5... (dependency of propellor-2.17.0)
next goal: MonadCatchIO-transformers (dependency of prod-0.0.1)
rejecting: MonadCatchIO-transformers-0.3.1.3 (conflict:
base==4.9.1.0/installed-4.9..., MonadCatchIO-transformers => base<4.9)
rejecting: MonadCatchIO-transformers-0.3.1.2,
MonadCatchIO-transformers-0.3.1.1, MonadCatchIO-transformers-0.3.1.0
(conflict: base==4.9.1.0/installed-4.9..., MonadCatchIO-transformers =>
base<4.8)
rejecting: MonadCatchIO-transformers-0.3.0.0,
MonadCatchIO-transformers-0.2.2.3, MonadCatchIO-transformers-0.2.2.2,
MonadCatchIO-transformers-0.2.2.1, MonadCatchIO-transformers-0.2.2.0,
MonadCatchIO-transformers-0.2.1.0, MonadCatchIO-transformers-0.2.0.0
(conflict: base==4.9.1.0/installed-4.9..., MonadCatchIO-transformers =>
base<4.7)
rejecting: MonadCatchIO-transformers-0.1.0.1 (conflict:
transformers==0.5.2.0/installed-0.5..., MonadCatchIO-transformers =>
transformers==0.1.*)
rejecting: MonadCatchIO-transformers-0.1.0.0,
MonadCatchIO-transformers-0.0.2.0, MonadCatchIO-transformers-0.0.1.0
(conflict: transformers==0.5.2.0/installed-0.5..., MonadCatchIO-transformers
=> transformers<0.2)
Dependency tree exhaustively searched.

似乎包 'MonadCatchIO-transformers' 包需要旧版本的 'base',以及更旧版本的变形金刚。

我尝试按照 this post 的建议(编辑 MonadCatchIO-transformers 的配置然后安装)来覆盖这些要求,但不知何故得到了相同的错误消息。

我还尝试了很多其他的东西,包括有沙箱和没有沙箱的这个,以及重新安装我的整个 ghc 等等。有什么办法可以摆脱这个阴谋集团的地狱吗?

当面对 Hackage 包无法满足的依赖关系时,你应该做的第一件事是 checking the package documentation at Hackage to have a broader picture of the problem. In this case, the documentation reveals that MonadCatchIO-transformers was deprecated in favour of the exceptions 包,它提供了一个类似的接口(这解释了为什么 MonadCatchIO-transforemrs base 4.9 没有更新)。既然如此,您基本上可以通过三种方法来构建您的包:

1。将代码切换为 exceptions

由于 MonadCatchIO-transformers 似乎是您在代码中直接使用的依赖项(与传递依赖项相对),建议 long-term解决方案是更新您的代码以使用 exceptions 而不是 MonadCatchIO-transformers.

2。为这个项目使用 GHC 7.10

如果您现在不能或不想切换到 exceptions,另一种方法是设置并行 GHC 7.10.x 安装, 这样你就可以使用 base 4.8. cabal-install 与多个版本的 GHC 一起方便地使用的方法的建议在 Using cabal with multiple GHC versions (through cabal settings -- be sure to also read the more recent answers further down the page) and in this blog post by Edsko de Vries (by managing your bash environment). Another possibility is using Stack (rather than cabal-install) to build this specific project and switching to a resolver that provides base 4.8 and MonadCatchIO-transformers (such as the LTS 6.30 Stackage 快照中提出),因为 Stack 可以安装和管理替代 GHC 版本的项目需要它(参见 stack setup 命令)。 Stack 不会干扰您通常的 cabal-install 环境或您的 system-wide GHC 安装;既然如此,如果您将此项目切换到 Stack,您可以在其他任何地方继续使用 cabal-install

3。调整MonadCatchIO-transformers

的上限

还有安装自定义版本 MonadCatchIO-transformers 的方法,调整上限 base变形金刚。虽然这可能是最快的方法 运行,但在这种情况下,它也是最不可持续的方法,考虑到 MonadCatchIO-transformers has been deprecated for several years already.至于为什么这对你不起作用...

I have tried following the advice of this post (editing the configuration of MonadCatchIO-transformers and then installing) to override these requirements, but somehow get the same error message.

...事实上你字面上同样的错误信息表明cabal-install没有选择你的习惯MonadCatchIO-transformers版本。您是否更改了 MonadCatchIO-transformers 的版本,无论是在您更改的 .cabal 文件中(如您链接到的问答中所建议的)还是在您项目的 .cabal 文件中?