2016-12-10 37 views
0

我正在處理ByteStrings流。我已經通過進口的字節串:Data.ByteString.Char8不會導出stripSuffix

import qualified Data.ByteString as B 

我可以從字節串庫例如爲:

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

這工作按預期調用各項功能。

我需要一個函數從ByteString中刪除尾隨的換行符。我選擇使用ByteStringstripSuffix。我的代碼如下所示:

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

但我的代碼將無法編譯,並提供了以下錯誤:

Not in scope: ‘B.stripSuffix’ 

我試圖安裝最新版本的GitHub字節串,但是這並沒有幫幫我。

編輯:

我注意到,有什麼問題我GHC-PKG列表。它給我下面的輸出:

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時,它將轉到您的每個用戶包數據庫。爲了避免進一步的頭痛,我建議的第一件事就是擺脫新字節字符串已安裝,具有:

ghc-pkg unregister bytestring-0.10.8.2 

然後,以獲取最新字節字符串,您應該更新在哈斯克爾安裝你的系統(例如,最新的minimal Haskell Platform帶有bytestring-0.10.8.1)。或者,您可以使用Stack爲您的項目管理多個GHC版本(以及它們的適當包數據庫)。

+1

升級GHC看起來像是過度殺傷。爲什麼不給出使用用戶包數據庫(已經有適當版本的bytestring可用)構建的說明? –

+0

@DanielWagner也許我錯過了一些東西,但是不需要重建所有依賴* bytestring *(包括全局數據庫中的* binary *和* unix *)以及大量用戶的已安裝包數據庫)? – duplode

+0

是的,管理構建工作是cabal的發明。 –