2013-10-21 28 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來創建和管理沙箱。