Data.ByteString.Char8不导出stripSuffix

时间:2016-12-10 18:12:41

标签: haskell cabal bytestring conduit

我正在研究ByteStrings的流程。我通过以下方式导入了ByteString:

import qualified Data.ByteString as B

我可以调用ByteString库中的每个函数,例如:

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

这是按预期工作的。

我需要一个函数来从ByteString中删除尾部换行符。我选择使用stripSuffix中的ByteString。我的代码如下所示:

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

但我的代码无法编译并出现以下错误:

Not in scope: ‘B.stripSuffix’

我已尝试从GitHub安装最新版本的ByteString,但这没有帮助。

编辑:

我注意到我的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可能是问题的原因。我怎么解决这个问题?有没有一种简单的方法来卸载bytestring-0.10.6.0?

1 个答案:

答案 0 :(得分:2)

首先,值得一提的是stripSuffix确实是在 bytestring 的0.18版本中引入的。引用the changelog

  

0.10.8.0 Duncan Coutts duncan@community.haskell.org 2016年5月

     

[其他]

     
      
  • 为懒惰和严格的字节串添加了stripPrefixstripSuffix
  •   

对你的问题感到悲伤:

  

是否有一种简单的方法可以卸载bytestring-0.10.6.0?

不,没有,因为,正如 ghc-pkg 输出告诉你的那样,0.10.6.0版本是全球安装的软件包之一(即系统范围内而不是用户)。卸载它会破坏以前安装的所有依赖于 bytestring 的其他软件包。当您从GitHub安装 bytestring 时,它会转到您的每用户包数据库。为了避免进一步的头痛,我建议的第一件事是摆脱你已经安装的新的 bytestring

ghc-pkg unregister bytestring-0.10.8.2

然后,要获取最新的 bytestring ,您应该更新系统中的Haskell安装(例如,最新的minimal Haskell Platform携带 bytestring-0.10.8.1 )。或者,您可以使用Stack为项目管理多个GHC版本(以及适用于它们的包数据库)。