新安装期间的Snap Framework编译错误

时间:2013-01-27 18:41:31

标签: haskell haskell-snap-framework

我第一次安装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.

2 个答案:

答案 0 :(得分:2)

errors either的依赖关系指定为either >= 3.0.1,而either未列为snap的构建依赖关系(因为已使用的模块Control.Monad.Trans.EitherControl.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,这也应该解决问题。