2013-10-21 57 views
1

我得到这种类型的错误:捕捉:PARAMS类型的错误

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类型是地图字节串[字节串]

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 

谢谢。

+0

您是否安装了多个版本的容器?你可以使用'ghc-pkg list containers'来检查。 – bennofs

+0

@bennofs我的确的确如此。我没有注册另一个,仍然得到相同的错误... –

回答

2

您遇到过卡巴尔地狱

问题是安装有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来创建和管理沙箱。