【问题标题】:cabal dependency resolution fail for 'lens''lens' 的 cabal 依赖解析失败
【发布时间】:2014-05-07 06:23:31
【问题描述】:

我刚刚进行了 cabal 更新并尝试从 hackage 安装“镜头”。这给了我以下错误 -

$ cabal install -j lens
Resolving dependencies...
Configuring dlist-0.7.0.1...
... <snip>
Configuring mtl-2.0.1.0...
Building mtl-2.0.1.0...
Failed to install mtl-2.0.1.0
Last 10 lines of the build log ( /home/aj/.cabal/logs/mtl-2.0.1.0.log ):
Building mtl-2.0.1.0...
Preprocessing library mtl-2.0.1.0...
[ 1 of 21] Compiling Control.Monad.Writer.Class (
Control/Monad/Writer/Class.hs, dist/build/Control/Monad/Writer/Class.o )
[ 2 of 21] Compiling Control.Monad.State.Class ( Control/Monad/State/Class.hs,
dist/build/Control/Monad/State/Class.o )
[ 3 of 21] Compiling Control.Monad.Reader.Class (
Control/Monad/Reader/Class.hs, dist/build/Control/Monad/Reader/Class.o )
[ 4 of 21] Compiling Control.Monad.RWS.Class ( Control/Monad/RWS/Class.hs,
dist/build/Control/Monad/RWS/Class.o )
[ 5 of 21] Compiling Control.Monad.Identity ( Control/Monad/Identity.hs,
dist/build/Control/Monad/Identity.o )
[ 6 of 21] Compiling Control.Monad.Error.Class ( Control/Monad/Error/Class.hs,
dist/build/Control/Monad/Error/Class.o )
Control/Monad/Error/Class.hs:93:18: Not in scope: `catch'
... <snip>
cabal: Error: some packages failed to install:
aeson-0.7.0.3 depends on mtl-2.0.1.0 which failed to install.
exceptions-0.6 depends on mtl-2.0.1.0 which failed to install.
free-4.7.1 depends on mtl-2.0.1.0 which failed to install.
lens-4.1.2 depends on mtl-2.0.1.0 which failed to install.
mtl-2.0.1.0 failed during the building phase. The exception was:
ExitFailure 1

所以看起来 mtl-2.0.1.0 坏了。然而,更多的依赖跟踪表明,镜头包定义中的任何内容实际上都依赖于该版本的 mtl。事实上,接下来我尝试的是 -

$ cabal install -j aeson
$ cabal install -j free
$ cabal install -j lens

而且成功没有问题。

那么为什么 cabal 在直接安装 lens 时会尝试安装 mtl-2.0.1.0 呢?我尝试删除我的 .ghc 和 .cabal 目录并重复这些步骤,结果相同。我使用的 cabal 版本是 1.16 -

$ cabal -V
cabal-install version 1.16.0.2
using version 1.16.0 of the Cabal library 

【问题讨论】:

  • 这与transformers的最近更新有关。如果您可以等待几天直到升级依赖于 transformers 的软件包,那么您在安装 lens 时应该不会遇到任何问题。
  • @DannyNavarro 好吧,我确实设法使用上述方法安装了镜头。问题更多的是 - 为什么,如果 cabal install lens 失败,cabal install aeson &amp;&amp; cabal install free &amp;&amp; cabal install lens 会工作吗?
  • 我猜它是有效的,因为通过首先安装 free 和 aeson,您会强制 cabal 使用已安装的版本,而不是自行选择它们。似乎选择了一些使用mtl-2.0.1.0 的软件包版本。也许它是 aeson 或 free 依赖项的上限,但很可能是依赖关系图中更深的其他包。

标签: haskell cabal


【解决方案1】:

我使用的解决方法是首先安装带有 transformers 3 标志的 transformers-compat

$ cabal install -ftransformer3 transformers-compat

然后安装带有变形金刚0.3.0.0约束的镜头

$ cabal install --constraint="transformers==0.3.0.0" lens

【讨论】:

    【解决方案2】:

    我也遇到了这个错误。我想我已经设法通过手动解包mtl-2.0.1.0 来修复它,在Control/Monad/Error/Class.hs (L:55) 中将catch 显式添加到Control.Exception 的导入列表中,然后运行cabal install。

    之后我可以运行cabal install lens。我很想知道这是否也适合你!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      相关资源
      最近更新 更多