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"
1条答案
按热度按时间rvpgvaaj1#
默认情况下,Haskell中的字符串文字总是被视为
String
,它等价于[Char]
。大多数类似字符串的数据结构都定义了一个名为pack
的函数来进行转换,bytestring
包也不例外(注意,这是pack
从Data.ByteString.Char8
转换而来; x1M6 N1 x中的一个从x1M7 N1 x转换而来)。但是,GHC还支持一个名为
OverloadedStrings
的扩展。如果您愿意启用这个扩展,ByteString
将实现一个名为IsString
的类型类。启用这个扩展后,字符串文字(如"a"
)的类型不再是[Char]
,而是forall a. IsString a => a
(类似于3
这样的数值类型是forall a. Num a => a
)。如果类型在作用域中,这将很好地专用于ByteString
。如果你选择这条路,确保你理解了文档中列出的这个例子的限制条件。对于ASCII字符,这不会造成问题,但是如果你的字符串中有 * 超出 * ASCII范围的Unicode字符,你需要注意这一点。