我想安装yesod
来学习一些关于网页的知识,并在业余时间与Haskell一起玩,但是当我这样做时:
> cabal install yesod
Resolving dependencies...
cabal: cannot configure cprng-aes-0.2.2. It requires crypto-api >=0.8
For the dependency on crypto-api >=0.8 there are these packages:
crypto-api-0.8. However none of them are available.
crypto-api-0.8 was excluded because skein-0.1.0.1 requires crypto-api ==0.6.*
crypto-api-0.8 was excluded because crypto-api-0.6.4 was selected instead
crypto-api-0.8 was excluded because clientsession-0.7.3.1 requires crypto-api
>=0.6.4 && <0.7
但我认为我安装了正确的软件包
cabal list cprng-aes skein crypto-api clientsession
* clientsession
Synopsis: Securely store session data in a client-side cookie.
Default available version: 0.7.3.1
Installed versions: 0.7.3.1
Homepage: http://github.com/snoyberg/clientsession/tree/master
License: BSD3
* cprng-aes
Synopsis: Crypto Pseudo Random Number Generator using AES in counter mode.
Default available version: 0.2.2
Installed versions: 0.2.2
Homepage: http://github.com/vincenthz/hs-cprng-aes
License: BSD3
* crypto-api
Synopsis: A generic interface for cryptographic operations
Default available version: 0.8
Installed versions: 0.6.4, 0.8
Homepage: http://trac.haskell.org/crypto-api/wiki
License: BSD3
* crypto-api-tests
Synopsis: A test framework and KATs for cryptographic operations.
Default available version: 0.1
Installed versions: [ Not installed ]
Homepage: http://trac.haskell.org/crypto-api/wiki
License: BSD3
* hack-middleware-clientsession
Synopsis: Middleware for easily keeping session data in client cookies.
Default available version: 0.0.1
Installed versions: [ Not installed ]
Homepage: http://github.com/snoyberg/hack-middleware-clientsession/tree/master
License: BSD3
* skein
Synopsis: Skein, a family of cryptographic hash functions. Includes
Skein-MAC as well.
Default available version: 0.1.0.1
Installed versions: 0.1.0.1
License: BSD3
我对cabal install
了解不多,但似乎crypto-api >=0.8
和<7
都是必需的,这似乎是不可能的。
答案 0 :(得分:8)
Crypto-API维护者。
问题
问题是包是互斥的。最新的cprng-aes需要crypto-api版本>= 0.8
。最新的绞纱需要crypto-api 0.6.*
。所以我们想要发生的事情是绞肉开发人员(我将通过电子邮件发送)来更新包裹。
现在
到那时,您需要安装相关软件包的旧版本。尝试类似:
cabal install yesod 'crypto-api == 0.6.4' 'cprng == 0.2.1'
我认为语法是正确的。如果没有,你可以随时做:
cabal install yesod crypto-api-0.6.4 cprng-0.2.1
社区如何避免
从长远来看,我希望cabal会变得更好并自动找到兼容的版本,就像我上面所做的那样。除了每个人都提到并且没有人实现的这种集合改进之外,对于软件包维护者而言,尝试在其构建版本上保持一致的下限是很好的。如果cprng-aes仍然接受crypto-api >= 0.5
,那么我认为这将由cabal安装。这对包维护者有点要求,但他们可以使用CPP和cabal提供的{MAX,MIN}_VERSION
宏来完成。
编辑:更新 Felipe更新了绞纱并上传到hackage。迈克尔已经更新了客户评论,并且看到他是Yesod维护者并且已经参与了电子邮件对话,我相信他很快就会把它上传到hackage。应该在您阅读此消息时解决问题,只需运行:
cabal update ; cabal install yesod
经过反思,我看到crypto-api中主流版本的流量有多大会引起社区其他人的注意。我不知道如何处理这个问题。我本可以观察到“如果我做出这个改变,没有人会受到影响”并且只是打破了PVP。 OTOH,如果我在没有遵循PVP的情况下打破某些代码,那么他们就有理由感到不安。有社区评论吗?