我第一次安装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.
答案 0 :(得分:2)
errors
either
的依赖关系指定为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"
建立它。
答案 1 :(得分:0)
我将snap 0.11上传到hackage,这也应该解决问题。