令人费解的Data.Encoding错误

时间:2014-02-26 17:26:34

标签: haskell encoding character-encoding

我正在尝试使用Data.Encoding的解码器来解决某些我不确定编码正确的文本。当我尝试将以下代码加载到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)。但它没关系,因为encoding's hackage page没有指定所需的bytestring版本。

此时,我几乎想为bytestrings的非unicode编码编写我自己的一组解码器,将它们转换为utf-无论什么字节串并使用Data.Text.Encoding但我不应该必须给出Data.Encoding的存在。

1 个答案:

答案 0 :(得分:1)

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