haskell 如何将变量保存为字节串?

xuo3flqw  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(158)

这是一个愚蠢的问题,但如果我有这个:

a :: B.ByteString
a = "a"

我得到一个错误,说“无法匹配类型B.ByteString与类型[Char]".我知道是什么问题,但我不知道如何解决它,你能帮助吗?thx.

rvpgvaaj

rvpgvaaj1#

默认情况下,Haskell中的字符串文字总是被视为String,它等价于[Char]。大多数类似字符串的数据结构都定义了一个名为pack的函数来进行转换,bytestring包也不例外(注意,这是packData.ByteString.Char8转换而来; x1M6 N1 x中的一个从x1M7 N1 x转换而来)。

import Data.ByteString.Char8(pack)

a :: B.ByteString
a = pack "a"

但是,GHC还支持一个名为OverloadedStrings的扩展。如果您愿意启用这个扩展,ByteString将实现一个名为IsString的类型类。启用这个扩展后,字符串文字(如"a")的类型不再是[Char],而是forall a. IsString a => a(类似于3这样的数值类型是forall a. Num a => a)。如果类型在作用域中,这将很好地专用于ByteString

{-# LANGUAGE OverloadedStrings #-}

a :: B.ByteString
a = "a"

如果你选择这条路,确保你理解了文档中列出的这个例子的限制条件。对于ASCII字符,这不会造成问题,但是如果你的字符串中有 * 超出 * ASCII范围的Unicode字符,你需要注意这一点。

相关问题