1

第一次安装 Snap 时收到以下错误。我试过先安装抢劫但得到同样的错误。我正在使用 Ubuntu 12.04 32 位桌面(全新安装)和 ghc 7.4.1。

其他人得到这个错误吗?解决方案?谢谢。

[18 of 29] Compiling Snap.Snaplet.HeistNoClass ( src/Snap/Snaplet/HeistNoClass.hs, dist/build/Snap/Snaplet/HeistNoClass.o )

src/Snap/Snaplet/HeistNoClass.hs:195:32:
Couldn't match expected type `n0 (Either e'0 b0)'
            with actual type `Text'
Expected type: String -> n0 (Either e'0 b0)
  Actual type: String -> Text
In the first argument of `(.)', namely `T.pack'
In the first argument of `mapEitherT', namely
  `(T.pack . intercalate "")'
cabal: Error: some packages failed to install:
sample1-0.1 depends on snap-0.10.0.1 which failed to install.
snap-0.10.0.1 failed during the building phase. The exception was:
ExitFailure 1
snaplet-sqlite-simple-0.4.0 depends on snap-0.10.0.1 which failed to install.
4

2 回答 2

2

on的依赖errorseither指定为either >= 3.0.1,并且either没有被列为构建依赖snap(因为使用的模块Control.Monad.Trans.Either是从 重新导出的Control.Error,这不是必需的,即使snap直接使用来自 的代码either)。因此,构建snap会引入最新版本的either.

但是,在 中either-3.1,类型发生了mapEitherT变化。它曾经是

mapEitherT :: Functor m => (e -> f) -> (a -> b) -> EitherT e m a -> EitherT f m b

either-3.0.*,现在是

mapEitherT :: (m (Either e a) -> n (Either e' b)) -> EitherT e m a -> EitherT e' n b

代码是为旧版本编写的。

您可以限制either要使用的版本,

cabal install snaplet-sqlite-simple --constraint="either < 3.1"

建造它。

于 2013-01-27T18:56:44.833 回答
0

我将 snap 0.11 上传到 hackage,这也应该可以解决问题。

于 2013-01-28T15:40:09.077 回答