2016-12-10 6 views
0

ByteString의 스트림에서 작업하고 있습니다. 나는 ByteString 라이브러리 예컨대 : 의도 한대로이 작동Data.ByteString.Char8은 stripSuffix를 내 보내지 않습니다.

reverseBS :: Monad m => Conduit B.ByteString m B.ByteString 
reverseBS = CL.map B.reverse 

에서 모든 함수를 호출 할 수 있습니다

import qualified Data.ByteString as B 

: 나는 통해 ByteString을 가져온.

ByteString에서 후행 줄 바꿈을 제거하는 함수가 필요합니다. ByteString에서 stripSuffix을 사용하기로 선택했습니다. 내 코드는 다음과 같습니다

removeNewline :: Monad m => Conduit B.ByteString m B.ByteString 
removeNewline = CL.map $ B.stripSuffix "\n" 

그러나 컴파일되지 않습니다 내 코드는 다음과 같은 오류 제공 : 나는 GitHub에서 ByteString의 최신 버전을 설치하려고했지만이하지 않았다

Not in scope: ‘B.stripSuffix’ 

을 도움.

편집 :

내가 내 GHC-PKG 목록에 문제가 있음을 발견했습니다. 이 문제의 원인 일 수 있습니다 패키지에 대한 두 개의 서로 다른 디렉토리와 ByteString의 두 가지 버전으로 찾고처럼 보이는

Thomass-MacBook-Pro:src ThomasVanhelden$ ghc-pkg list 
/Applications/ghc-7.10.3.app/Contents/lib/ghc-7.10.3/package.conf.d 
    Cabal-1.22.5.0 
    array-0.5.1.0 
    base-4.8.2.0 
    bin-package-db-0.0.0.0 
    binary-0.7.5.0 
    bytestring-0.10.6.0 
    containers-0.5.6.2 
    deepseq-1.4.1.1 
    directory-1.2.2.0 
    filepath-1.4.0.0 
    ghc-7.10.3 
    ghc-prim-0.4.0.0 
    haskeline-0.7.2.1 
    hoopl-3.10.0.2 
    hpc-0.6.0.2 
    integer-gmp-1.0.0.0 
    pretty-1.1.2.0 
    process-1.2.3.0 
    rts-1.0 
    template-haskell-2.10.0.0 
    terminfo-0.4.0.1 
    time-1.5.0.1 
    transformers-0.4.2.0 
    unix-2.7.1.0 
    xhtml-3000.2.1 
/Users/ThomasVanhelden/.ghc/x86_64-darwin-7.10.3/package.conf.d 
    WAVE-0.1.3 
    abstract-deque-0.3 
    abstract-par-0.3.3 
    async-2.1.1 
    attoparsec-0.13.1.0 
    base16-bytestring-0.1.1.6 
    base64-bytestring-1.0.0.1 
    blaze-builder-0.4.0.2 
    bytestring-0.10.8.2 
    bytestring-lexing-0.5.0.2 
    cereal-0.5.4.0 
    chunked-data-0.3.0 
    conduit-1.2.8 
    conduit-combinators-1.0.8.3 
    conduit-extra-1.1.15 
    exceptions-0.8.3 
    extensible-exceptions-0.1.1.4 
    fail-4.9.0.0 
    hashable-1.2.4.0 
    lifted-base-0.2.3.8 
    mmorph-1.0.9 
    monad-control-1.0.1.0 
    monad-par-0.3.4.8 
    monad-par-extras-0.3.3 
    mono-traversable-1.0.1 
    mtl-2.2.1 
    mwc-random-0.13.5.0 
    network-2.6.3.1 
    network-conduit-1.1.0 
    parallel-3.2.1.0 
    parallel-io-0.3.3 
    parseargs-0.2.0.8 
    primitive-0.6.1.0 
    random-1.1 
    resourcet-1.1.8.1 
    scientific-0.3.4.9 
    semigroups-0.18.2 
    split-0.2.3.1 
    stm-2.4.4.1 
    streaming-commons-0.1.16 
    tagged-0.8.5 
    text-1.2.2.1 
    transformers-base-0.4.4 
    transformers-compat-0.5.1.4 
    unix-compat-0.4.2.0 
    unordered-containers-0.2.7.1 
    vector-0.11.0.0 
    vector-algorithms-0.7.0.1 
    void-0.7.1 
    word8-0.1.2 
    zlib-0.6.1.2 

: 그것은 나에게 다음과 같은 출력을 제공합니다. 이 문제를 어떻게 해결할 수 있습니까? bytestring-0.10.6.0을 제거하는 간단한 방법이 있습니까?

+0

어떻게 컴파일하나요? –

답변

2

전적으로 stripSuffix바이트 테스터 의 0.18 버전에 실제로 도입되었다고 언급 할 가치가 있습니다. the changelog 인용 :

0.10.8.0 Duncan Coutts [email protected] May 2016

[etc.]

  • Added stripPrefix and stripSuffix for lazy and strict bytestrings

그 이후 귀하의 질문에, 슬픈 :

Is there a simple way to uninstall bytestring-0.10.6.0?

아니,이 없기 때문에 출력을 알려주는 GHC-PKG는 0.10.6.0 버전으로 (즉, 사용자 별이 아닌 시스템 차원의) 패키지입니다. 제거하면 이전에 설치 한 다른 모든 패키지가 깨져서 bytestring에 종속됩니다. GitHub에서 바이트 코드을 설치하면 사용자 별 패키지 데이터베이스로 이동했습니다. 더 두통을 피하기 위해, 내가 제안 제일 먼저 새로운 가에 설치 한, bytestring 제거지고 : 을 bytestring 최신을 얻기 위해, 그리고

ghc-pkg unregister bytestring-0.10.8.2 

을, 당신의 하스켈 설치를 업데이트한다 귀하의 시스템 (예 : 최신 minimal Haskell Platform바이트 길이 - 0.10.8.1입니다). 또는 Stack을 사용하여 프로젝트의 여러 GHC 버전 (해당 패키지 데이터베이스는 물론)을 관리 할 수 ​​있습니다.

+1

GHC를 업그레이드하는 것이 과도한 것처럼 보입니다. 대신 사용자 패키지 데이터베이스 (적절한 바이트 스트링 사용 가능)를 사용하여 빌드 지침을 제공하지 않는 이유는 무엇입니까? –

+0

@DanielWagner 어쩌면 내가 누락되었지만, * bytestring * (* 바이너리 * 및 * 유닉스 *를 글로벌 데이터베이스에 포함하고 사용자의 큰 덩어리를 포함)에 의존하는 설치된 모든 패키지를 다시 빌드해야 할 필요는 없습니다 데이터 베이스)? – duplode

+0

예, 그 빌드 작업을 관리하는 것은 카발이 발명 된 것입니다. –