Haskell语言学习笔记(49)ByteString Text

Data.ByteString

String 是 [Char] 的同义词,在使用上存在List的惰性所带来的性能问题。
在处理大型二进制文件时,可以使用 ByteString 来代替 String。
ByteString 类型分为以下两种:
* Lazy 模块 Data.ByteString.Lazy 中的 Data.ByteString.Lazy.ByteString
Lazy 模块内部使用 chunks(64K数据块)。
* Strict 模块 Data.ByteString 中的 Data.ByteString.ByteString

Prelude> import qualified Data.ByteString.Lazy as B
Prelude B> import qualified Data.ByteString as S
Prelude B S> B.pack [99,97,110]
"can"
Prelude B S> B.fromChunks [S.pack [40,41,42], S.pack [43,44,45], S.pack [46,47,48]]
"()*+,-./0"
Prelude B S> B.cons 85 $ B.pack [80,81,82,84]
"UPQRT"
Prelude B S> foldr B.cons' B.empty [50..60] 
"23456789:;<"

Data.Text

在处理大型文本文件时,可以使用 Text 来代替 String。
Text 是一个 Unicode 友好的字符串类型。
Text 类型分为以下两种:
* Lazy 模块 Data.Text.Lazy 中的 Data.Text.Lazy.Text
Lazy 模块内部使用 chunks。
* Strict 模块 Data.Text 中的 Data.Text.Text

Prelude> import qualified Data.Text.Lazy as T
Prelude T> :t T.pack "abc"
T.pack "abc" :: T.Text
Prelude T> T.replace (T.pack "a") (T.pack "b") (T.pack "aXaXaX")
"bXbXbX"
Prelude T> T.splitOn (T.pack "a") (T.pack "aXaXaX")
["","X","X","X"]
  • pack :: String -> Text
    pack 函数将 String 转换成 Text。

Data.Text.Encoding

Encoding 模块用于 ByteString 和 Text 之间类型转换。
Text 包含 Lazy 模块 Data.Text.Encoding.Lazy 和 Strict 模块 Data.Text.Encoding。
其中 Lazy 模块提供 Data.ByteString.Lazy.ByteString 和 Data.Text.Lazy.Text 之间的类型转换功能。
而 Strict 模块则提供 Data.ByteString.ByteString 和 Data.Text.Text 之间的类型转换功能。

Data.String.Conversions

$ cabal install string-conversions
Installed string-conversions-0.4.0.1
Prelude> :m +Data.String.Conversions
Prelude Data.String.Conversions>

Conversions 模块提供以下五种类型之间的类型转换功能。
* String
* Data.ByteString.ByteString
缩写为 StrictByteString 或 SBS
* Data.ByteString.Lazy.ByteString
缩写为 LazyByteString 或 LBS
* Data.Text.Text
缩写为 StrictText 或 ST
* Data.Text.Lazy.Text
缩写为 LazyText 或 LT

Prelude Data.String.Conversions> cs "abc" :: ST
"abc"
  • ConvertibleStrings
    ConvertibleStrings 是个类型类,五种字符串类型都被定义成了 ConvertibleStrings 类型类的实例。
  • cs :: ConvertibleStrings a b => a -> b
    cs 函数根据输入输出类型自动实施五种字符串类型之间的类型转换功能。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值