Snap:Params类型错误

时间:2013-10-21 12:48:42

标签: haskell haskell-snap-framework

我收到此类错误:

Couldn't match type `containers-0.5.0.0:Data.Map.Base.Map
                       ByteString [ByteString]'
              with `M.Map ByteString [ByteString]'
Expected type: M.Map ByteString [ByteString]
  Actual type: Params

但Params类型是Map ByteString [ByteString]

type Params = Map ByteString [ByteString]

如果有任何帮助,这是完整的功能:

import qualified Data.Map as M

categoryDoc :: Params -> Document
categoryDoc params = map (\(k,[v]) -> T.decodeUtf8 k =: T.decodeUtf8 v) $ M.toList params

谢谢。

1 个答案:

答案 0 :(得分:2)

您遇到了 cabal hell

问题是安装了containers个软件包的多个版本。这意味着Map数据类型有两个版本,一个来自containers-0.5.0.0,另一个来自另一个版本。这两个不匹配,这就是你得到错误的原因。


解决该问题的最简单方法是删除~/.ghc(在unix上)目录并重建所有内容。但这不会保护你将来免受此类问题的影响,并且它也有可能根本不起作用。所以这不是一个好的解决方案。

如果您的cabal-install至少为1.18版,则可以使用 cabal sandboxes 功能。这允许您为每个项目创建一个隔离的包环境,从而避免此类冲突。只需切换到您的项目并运行:

cabal sandbox init                        # Create a new sandbox
cabal install --only-dependencies         # Install dependencies
cabal build                               # Build your project

您还可以使用cabal install将项目安装到沙箱或cabal repl以使用正确的项目设置启动GHCi。

如果您没有足够新版本的cabal-install且无法升级,则可以使用cabal-dev创建和管理沙箱。