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 函数根据输入输出类型自动实施五种字符串类型之间的类型转换功能。
OverloadedStrings
GHC 提供了语言扩展 OverloadedStrings。
- 不使用这个语言扩展,所有的字符串字面量都属于 String 也就是 [Char] 类型。
- 如果使用这个语言扩展,那么所有的字符串字面量就都属于
IsString a => a类型。 - String, ByteString, Text 都是 IsString 类的实例。
Module Data.String
class IsString a where
fromString :: String -> a
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text.IO as T
a :: Text
a = "Hello World"
b :: ByteString
b = "Hello World"
c :: String
c = "Hello World"
main = do putStrLn "Hello as String!"
T.putStrLn "Hello as Text!"
Text 是 Monoid
Prelude Data.Text> ("abc" :: Text) <> ("def" :: Text)
"abcdef"
Haskell语言学习笔记(49)ByteString Text的更多相关文章
- Haskell语言学习笔记(88)语言扩展(1)
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...
- Haskell语言学习笔记(79)lambda演算
lambda演算 根据维基百科,lambda演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义.函数如何被应用以 ...
- Haskell语言学习笔记(69)Yesod
Yesod Yesod 是一个使用 Haskell 语言的 Web 框架. 安装 Yesod 首先更新 Haskell Platform 到最新版 (Yesod 依赖的库非常多,版本不一致的话很容易安 ...
- Haskell语言学习笔记(20)IORef, STRef
IORef 一个在IO monad中使用变量的类型. 函数 参数 功能 newIORef 值 新建带初值的引用 readIORef 引用 读取引用的值 writeIORef 引用和值 设置引用的值 m ...
- Haskell语言学习笔记(39)Category
Category class Category cat where id :: cat a a (.) :: cat b c -> cat a b -> cat a c instance ...
- Haskell语言学习笔记(93)Data.Text
Data.Text.Read Prelude> :set -XOverloadedStrings Prelude> :m +Data.Text.Read Prelude Data.Text ...
- Haskell语言学习笔记(92)HXT
HXT The Haskell XML Toolbox (hxt) 是一个解析 XML 的库. $ cabal install hxt Installed hxt-9.3.1.16 Prelude&g ...
- Haskell语言学习笔记(89)Unicode UTF8
unicode-show $ cabal install unicode-show Installed unicode-show-0.1.0.2 Prelude> :m +Text.Show.U ...
- Haskell语言学习笔记(86)字符串格式化与插值
String 的格式化 Text.Printf 这个模块用来处理字符串格式化. printf :: PrintfType r => String -> r printf 用于格式化字符串, ...
随机推荐
- yum运行时提示被锁住了解决办法
1.当大家用linux的yum时,是不是经常会遇到下面的情况Loaded plugins: fastestmirrorExisting lock /var/run/yum.pid: another c ...
- linux ping报错Name or service not known
ubuntu设置静态ip以后忘记设置dns,ping的时候报错:Name or service not known 添加dns即可 vi /etc/resolv.conf nameserver 8.8 ...
- bzoj 4772 显而易见的数论——拆分数(五边形数定理)+线性筛
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4772 题解:https://blog.csdn.net/Dream_Lolita/artic ...
- jmeter --自动化badboy脚本开发技术
jmeter --自动化badboy脚本开发技术 一般人用badboy都是使用它的录制功能,其它badboy还是一款自动化的工具,它可以实现检查点.参数化.迭代.并发.报告.断点等功能.本文就这些功能 ...
- 深入理解ASP.NET MVC(1)
系列目录 ASP.NET MVC请求的服务过程 下图是书中的截图,表述了一次通常的ASP.NET MVC请求的服务过程: 从图中可以初步看出一个HttpRequest是如何被ASP.NET和ASP.N ...
- Microsoft Dynamics CRM 2011 常用JS 按F12 改动窗体上数据的方法
1.按F12打开控制台输入下面代码: contentIFrame.Xrm.Page.getAttribute("new_status").setValue(50);//设值cont ...
- 关于 eclipse startexplorer插件 快速打开文件夹
转自:http://basti1302.github.io/startexplorer/ Just drag-and-drop the button to the Eclipse menu bar t ...
- LINK : fatal error LNK1158: 无法运行“rc.exe”解决办法 and Visual Studio 2017 下载安装
LINK : fatal error LNK1158: 无法运行“rc.exe” 首先下载软件包:https://pan.baidu.com/s/1L1N1sikXUaZZd-9nmZnwjA 第一个 ...
- Java学习——Eclipse下载,java配置,新建,输入输出
Eclipse下载,java配置: 基本的软件是JDK,它可以编译.运行Java程序,下载地址是:https://www.oracle.com/technetwork/java/javase/dow ...
- 操作系统:Android(Google公司开发的操作系统)
ylbtech-操作系统:Android(Google公司开发的操作系统) Android是一种基于Linux的自由及开放源代码的操作系统.主要使用于移动设备,如智能手机和平板电脑,由Google(谷 ...