我正在尝试使用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
的存在。