2013-10-21 4 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 형지도입니다 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 

고맙습니다.

+0

여러 버전의 컨테이너를 설치 했습니까? 'ghc-pkg list containers'를 사용하여 확인할 수 있습니다. – bennofs

+0

@bennofs 사실 나는 그렇다. 다른 하나의 등록을 취소하고 여전히 같은 오류가 발생합니다 ... –

답변

2

캐벌 hell을 만났습니다.

containers 패키지의 여러 버전이 설치되어있는 것이 문제입니다. 즉, 데이터 형식이 인 두 가지 버전이 있습니다. 하나는 containers-0.5.0.0이고 다른 하나는 다른 버전입니다. 이 둘은 일치하지 않으므로 오류가 발생합니다.


이 문제에 대한 가장 쉬운 해결책은 ~/.ghc (유닉스)에 디렉토리와 재건 모든 것을 삭제하는 것입니다. 그러나 그것은 미래에 그러한 문제에서 당신을 보호하지 못할 것이며, 전혀 작동하지 않을 기회이기도합니다. 그래서 이것은 좋은 해결책이 아닙니다.

cabal-install 이상의 버전이 1.18 인 경우 cabal 샌드 박스 기능을 사용할 수 있습니다. 따라서 각 프로젝트에 대해 격리 된 패키지 환경을 만들 수 있으므로 이러한 충돌을 피할 수 있습니다. 그냥 프로젝트로 전환 및 실행 : 당신은 또한 당신의 프로젝트에 대한 올바른 설정으로 GHCi를 시작하는 샌드 박스 또는 cabal repl에 프로젝트를 설치하는 cabal install을 사용할 수 있습니다

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

.

cabal-install의 새 버전이없고 업그레이드 할 수없는 경우 cabal-dev을 사용하여 샌드 박스를 만들고 관리 할 수 ​​있습니다.