【发布时间】:2016-05-09 16:53:33
【问题描述】:
在我的 Haskell 程序中,我需要使用字符串和字节字符串:
import Data.ByteString.Lazy as BS (ByteString)
import Data.ByteString.Char8 as C8 (pack)
import Data.Char (chr)
stringToBS :: String -> ByteString
stringToBS str = C8.pack str
bsToString :: BS.ByteString -> String
bsToString bs = map (chr . fromEnum) . BS.unpack $ bs
bsToString 工作正常,但 stringToBS 在编译时出现以下错误:
Couldn't match expected type ‘ByteString’
with actual type ‘Data.ByteString.Internal.ByteString’
NB: ‘ByteString’ is defined in ‘Data.ByteString.Lazy.Internal’
‘Data.ByteString.Internal.ByteString’
is defined in ‘Data.ByteString.Internal’
In the expression: pack str
In an equation for ‘stringToBS’: stringToBS str = pack str
但我需要让它成为Data.ByteString.Lazy as BS (ByteString) 中的ByteString,以便在我的代码中实现进一步的工作功能。
知道如何解决我的问题吗?
【问题讨论】:
-
顺便说一句,我希望你知道你在做什么。
ByteString是字节序列,而不是字符串:它们之间的转换基本上取决于给定的编码。特别是,Char8假定所有内容都使用 latin-1 进行编码,并默默地截断其他所有内容。 -
你使用
String而不是Text有什么特殊原因吗?编码/解码的转换更简单一些。 -
因为我的其他函数需要String
标签: haskell bytestring