3

我对 Haskell 一个阴谋集团完全陌生,我正在努力让 yesod 工作。

我的 cabal 版本是使用 Cabal 库的 1.20.0.2 版本的 cabal-install 版本 1.20.0.3

这是我安装 alex 时发生的事情:

$ cabal install alex
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: alex-3.1.4 (user goal)
next goal: QuickCheck (dependency of alex-3.1.4)
rejecting: QuickCheck-2.8.1, 2.8 (global constraint requires ==2.7.6)
trying: QuickCheck-2.7.6
next goal: transformers (dependency of QuickCheck-2.7.6)
rejecting: transformers-0.4.3.0, 0.4.2.0, 0.4.1.0, 0.3.0.0, 0.2.2.1, 0.2.2.0,
0.2.1.0, 0.2.0.0, 0.1.4.0, 0.1.3.0, 0.1.1.0, 0.1.0.1, 0.1.0.0, 0.0.1.0,
0.0.0.0, 0.4.0.0 (global constraint requires installed instance)
Dependency tree exhaustively searched.

第二次尝试:

$ cabal install alex happy yesod-bin --allow-newer
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: alex-3.1.4 (user goal)
trying: QuickCheck-2.7.6/installed-1a8... (dependency of alex-3.1.4)
trying: tf-random-0.5/installed-ef3... (dependency of
QuickCheck-2.7.6/installed-1a8...)
next goal: primitive (dependency of tf-random-0.5/installed-ef3...)
rejecting: primitive-0.5.0.1/installed-8e5... (global constraint requires
==0.6)
rejecting: primitive-0.6 (conflict: tf-random =>
primitive==0.5.0.1/installed-8e5...)
rejecting: primitive-0.5.4.0, 0.5.3.0, 0.5.2.1, 0.5.1.0, 0.5.0.1, 0.5, 0.4.1,
0.4.0.1, 0.4, 0.3.1, 0.3, 0.2.1, 0.2, 0.1 (global constraint requires ==0.6)
Dependency tree exhaustively searched.

我需要做什么才能安装 alex?

一个相关的问题是: cabal install --- global constraint requires installed instance

@kosmikus 对这个问题的评论是:

因此 Stackage LTS 配置文件包含已安装的约束转换器,这意味着只能使用已经存在的转换器版本。这是合理的,因为 GHC 附带了特定版本的变压器。对于ghc-7.8,这是transformers-0.3.0.0。出于某种原因,cabal-install 不考虑这个安装的版本。您的部分日志没有包含足够的信息来了解原因。

如何修复 Stackage LTS 配置文件?它在 Ubuntu 上的什么位置?

4

2 回答 2

1

问题的原因是我的 GHC 太旧了。我下载了一个较新的版本并解决了这个问题。

失败(和错误)的尝试

您的当前目录中应该有一个cabal.config文件。使用任何文本编辑器打开它并搜索transformers installed字符串。

找到它后,将其替换为transformers ==0.4.3.0您喜欢的任何其他版本。

这是一个糟糕的解决方案,因为正如 dfeurer 所写:

transformers在包依赖结构中位于非常低的位置。我相信它只取决于base; 我想 Hackage 上的大部分软件包都直接或间接地依赖它。如果您 upgrade transformers,几乎系统中的每个依赖项都会变得混乱,这与您使用 Stackage 的目的相反。


Sibi 的清洁解决方案

按原样使用堆栈包。如果您有一些导致问题的全局包,请删除它们并专门使用堆栈。为每个项目使用沙箱也是一个好主意。

于 2015-05-31T12:53:29.607 回答
1

尝试这个cabal install alex --allow-newer

于 2015-06-01T13:27:54.883 回答