10

我玩过Text.Show.Pretty模块,它可以将 Haskell 数据结构(如记录)序列化为一种很好的人类可读格式,并且仍然能够使用read. 输出格式比 YAML 和 JSON 更具可读性。

使用 Haskell 记录的示例序列化输出Text.Show.Pretty

Book
  { author = "Plato"
  , title = "Republic"
  , numbers = [ 123
              , 1234
              ]
  }

来自 Ruby 世界,我知道 YAML 和 JSON 是大多数 Ruby 主义者用于序列化数据结构的首选格式。Haskell Show 和 Read 实例是否经常用于在 Haskell 中达到相同的目的?

4

2 回答 2

16

对于大型结构,我不会推荐它。read比糖蜜慢。轶事时间:我有一个名为yeganesh. 从概念上讲,它非常简单:读入[(String,Double)]大约 2000 个元素的 a 并转储出按元素排序的键。我曾经使用Show/来存储它Read,但发现切换到自定义打印机和解析器使程序加速了 8 倍。(注意:并不是解析速度提高了 8 倍。整个程序加速了八倍。这意味着解析速度比这更大。)这造成了令人不舒服的长时间停顿和即时满足之间的区别。

于 2013-04-25T02:50:26.327 回答
7

我同意 Daniel Wagner 的观点,但是如果您想要用户可以使用简单的文本编辑器操作的文件,您可以使用 read/show 来处理一小组数据,也就是配置文件。

我不认为这在haskellers中是一种常见的方式,我通常使用parsec而不是读取'config data'和一个自定义类/instance而不是Show。

如果你有很多数据,通常使用 Data.Binary 或 Data.Serialize。

于 2013-04-25T08:00:39.703 回答