Haskell 令人费解的数据。编码错误

Haskell 令人费解的数据。编码错误,haskell,encoding,character-encoding,Haskell,Encoding,Character Encoding,我正在尝试使用来自数据的解码器。对一些我不确定是否正确编码的文本进行编码。当我尝试将以下代码加载到haskell中时: import Data.Encoding (DynEncoding,decodeLazyByteStringExplicit,encodingFromStringExplicit) {- ...more imports ... -} import qualified Data.ByteString.Lazy as B (ByteString,takeWhile) {- ...

我正在尝试使用来自
数据的解码器。对一些我不确定是否正确编码的文本进行编码。当我尝试将以下代码加载到haskell中时:

import Data.Encoding (DynEncoding,decodeLazyByteStringExplicit,encodingFromStringExplicit)
{- ...more imports ... -}
import qualified Data.ByteString.Lazy as B (ByteString,takeWhile)

{- ... more code ... -}
decodeMyString :: Encoding enc => B.ByteString -> enc -> Either String String
decodeMyString str decoder = case (decodeLazyByteStringExplicit decoder str) of
    Left s -> Left $ show s
    Right decoded -> Right decoder
我得到以下错误:

Couldn't match expected type `bytestring-0.10.0.2:Data.ByteString.Lazy.Internal.ByteString'
            with actual type `B.ByteString'
In the second argument of `decodeLazyByteStringExplicit', namely
  `str'
In the expression: (decodeLazyByteStringExplicit decoder str)
In the expression:
  case (decodeLazyByteStringExplicit decoder str) of {
    Left s -> Left $ show s
    Right decoded -> Right decoded }
有人能解释为什么吗?我有最新版本的库
bytestring
(10.4)和
encoding
(0.7)。但这并不重要,因为它没有指定bytestring的必需版本


在这一点上,我几乎想为
bytestring
的非unicode编码编写自己的解码器集,以将它们转换为utf,不管是什么bytestring,并使用
Data.Text.Encoding
,但我不必考虑到
Data.Encoding
的存在

这是一个常见的问题,当两个不同的包使用同一库的不同版本组装时(在本例中为ByteString)。一个解决方案是。

不幸的是,由于此代码构成解析器的一部分,因此隐藏较新版本的bytestring会破坏解析器本身(parsec)的依赖关系,而隐藏较旧版本会引发相同的错误。还有其他方法吗?@MikeMenzel用一个通用版本的bytestring重新安装这两个包。例如,
cabal安装——重新安装parsec-yourotherpackage