string - 数据.文本与字符串

标签 string haskell text

虽然 Haskell 社区的普遍观点似乎是使用 Text 而不是 String 总是更好,但事实上,大多数维护的库的 API 仍然如此是面向字符串的让我很困惑。另一方面,有notable projects ,它将 String 完全视为错误,并提供 Prelude ,其中所有面向 String 的函数实例都替换为其 Text-对应项。

那么,除了向后和标准 Prelude 兼容性以及“切换惯性”之外,人们还有什么理由继续编写面向 String 的 API 吗? 与 String 相比,Text 是否还有其他缺点?

我对此特别感兴趣,因为我正在设计一个库并尝试决定使用哪种类型来表达错误消息。

最佳答案

我无条件的猜测是,大多数库编写者不想添加不必要的依赖项。由于字符串实际上是每个 Haskell 发行版的一部分(它是语言标准的一部分!),因此如果您使用字符串并且不需要用户从 hackage 中整理出文本发行版,那么采用它会更容易。

这是你必须忍受的“设计错误”之一,除非你能说服大多数社区成员在一夜之间切换。只要看看让 Applicative 成为 Monad 的父类(super class)需要多长时间——这是一个相对较小但非常想要的改变——并想象一下用 Text 替换所有 String 东西需要多长时间。

<小时/>

回答您更具体的问题:我会选择字符串,除非您通过使用文本获得明显的性能优势。错误消息通常是相当小的一次性事件,因此使用 String 应该不是一个大问题。

另一方面,如果您是那种放弃实用主义而追求理想主义的意识形态纯粹主义者,请选择文本。

<小时/>

* 我把设计错误放在了吓人的引号中,因为字符串作为字符列表是一个简洁的属性,使它们易于推理并与其他现有的列表操作函数集成。

关于string - 数据.文本与字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19608745/

相关文章:

c - 带指针和不带指针的 C 中的字符串复制

haskell - 在编程环境中什么构成协同数据?

php - 仅删除 txt 文件中的 LF

python - 如何同时从单词列表中检查并删除 '/' 和 '-'

c - 获取文本而不是 EOF

haskell - 从 Haskell 调用 ARPACK++(一个 C++ 库)会涉及什么?

button - 如何在Flutter中更改按钮主题的文字颜色

linux - bash grep 文本中的字符串并发送电子邮件

javascript - 替代字符串终止

haskell - 将 Monad 表示法转换为 Arrow 表示法