哪个漂亮的打印库?

时间:2012-03-18 19:25:59

标签: haskell pretty-print

所以从瞥一眼hackage我可以看到5个漂亮的打印库:

  • 很好的老HughesPJ漂亮
  • WL-pprint-额外
  • WL-pprint-terminfo的
  • WL-pprint
  • ANSI-WL-pprint
  • WL-pprint文本
等等,那是6岁吗? 6个漂亮的印刷图书馆......没等了,我们会再来。

无论如何,他们都是Wadler-Leijen,当然除了HughesPJ。我的理解是WL更简单,更快,因此可能是新代码的首选。

wl-pprint和wl-pprint-extras看起来是一样的...我不知道后者的“额外”是什么,或者“免费”在这里意味着什么(模块是Text.PrettyPrint.Free)

wl-pprint-terminfo和ansi-wl-pprint似乎都是具有ANSI终端颜色和诸如此类的变体,并且似乎是等效的,除了wl-pprint-terminfo没有任何文档。

wl-pprint-text当然使用Text。我不知道实际上有多快差异。

令我担心的是,他们中的许多人都有很多版本。这意味着他们已经添加了功能,修复了错误等等。但他们是否都修复了相同的错误?我倾向于支持ansi-wl-pprint,因为它有文档,最后一次上传是在2012年,有一些版本暗示作者仍在使用它。

但我不确定。有人有什么建议吗?而且我相信其他人同意5个几乎但不完全复制粘贴的模块可以做一些整合...

1 个答案:

答案 0 :(得分:24)

没有特别的顺序:

  • Text.PrettyPrint.Free中的“免费”表示free monad,根据包裹描述:“基于Wadler / Leijen漂亮打印机的免费monad”;其Doc类型在另一种类型上进行参数化,并且它具有Monad实例,允许您将“效果”嵌入Doc值。 wl-pprint-terminfo使用它来添加格式化功能;它不是竞争包,而是同一作者的扩展库。有关其添加内容的详细信息,请参阅wl-pprint-extras' documentation中与wl-pprint's list相比的添加列表。

  • wl-pprint-terminfo使用terminfo包进行格式化,因此它只适用于POSIX-y系统,而ansi-wl-pprint使用ansi-terminal包,所以它可以在Windows上运行。

  • 如果您已经使用Text,wl-pprint-text可能会有用,但除非您真的使用漂亮的打印机,否则它不太可能产生重大的性能影响

除非我有特定的要求,否则我可能只使用漂亮的软件包,因为它是其中一个引导软件包,因此无处不在。如果我想要格式化,我会选择ansi-wl-pprint,如果我正在使用Text,我会选择wl-pprint-text,但除此之外我没有看到使用第三方的特别令人信服的理由库。