哪个漂亮打印库?

40

浏览了 hackage 后,我发现有五个漂亮的打印库:

  • 老牌的 HughesPJ 打印库中的 pretty
  • wl-pprint-extras
  • wl-pprint-terminfo
  • wl-pprint
  • ansi-wl-pprint
  • wl-pprint-text

哦等等,那是六个吗?6个漂亮的打印库...不对,我们再数一次。

无论如何,它们都是 Wadler-Leijen 风格的打印库,除了 HughesPJ。我的理解是 WL 更简单更快,因此在编写新代码时可能会更受欢迎。

wl-pprint 和 wl-pprint-extras 看起来是相同的...我无法确定后者的“extra”是什么意思,或者这里的“Free”是什么意思(该模块是 Text.PrettyPrint.Free)。

wl-pprint-terminfo 和 ansi-wl-pprint 都似乎是带有 ANSI 终端颜色之类的变体,它们看起来是相等的,只是 wl-pprint-terminfo 没有任何文档。

wl-pprint-text 当然使用 Text。我不知道这实际上对速度有多大影响。

让我担心的是,其中很多库都经历了很多次发布。这意味着它们添加了功能、修复了错误等。但是它们是否都修复了相同的错误呢?我倾向于选择 ansi-wl-pprint,因为它有文档,最近一次上传是在2012年,并且已经发布了很多版本,这表明作者仍在维护。

但我不确定。有人有什么建议吗?我相信其他人也认为,这五个几乎但又不完全相同的模块可以进行一些合并...


3
wl-pprint比HughesPJ在嵌套/缩进方面更加灵活。它也有更好的文档 - Daan Leijen的旧网站上有完整的用户指南。简而言之,wl-pprint在我看来比HughesPJ“更好”,但HughesPJ是标准的。 - stephen tetley
1个回答

24

以下排名不分先后:

  • Text.PrettyPrint.Free 中的“Free”代表 自由单子,根据包描述:“基于 Wadler/Leijen pretty printer 的自由单子”;其Doc类型是另一种类型的参数,并且具有Monad实例,允许将“效果”嵌入到Doc值中。这被wl-pprint-terminfo用于添加格式功能;它不是竞争性的包,而是同一作者的扩展库。请参见wl-pprint-extras文档中的增加列表,了解它添加了什么,与wl-pprint清单进行比较以获取更详细的信息。

  • wl-pprint-terminfo使用terminfo包来进行格式化处理,因此只能在POSIX系统上运行,而ansi-wl-pprint使用ansi-terminal包,因此可以在Windows上运行。

  • wl-pprint-text可能在您已经使用Text时有用,但除非您真正频繁地使用漂亮的打印机,否则它不太可能产生重大的性能影响;这并不是一个非常计算密集的任务。

如果没有特殊需求,我可能会使用pretty包,因为它是boot包之一,可以在任何地方使用。如果我需要格式化,则会选择ansi-wl-pprint,如果我正在使用Text,则会选择wl-pprint-text,但除此之外,我没有特别充分的理由来使用第三方库。


1
谢谢回复,但是...比较wl-pprint和wl-ppprint-extras,唯一的区别似乎就是*-extras中的类型参数。我猜这就是广告宣传的内容。主要的区别在于WL格式化程序具有“group”和其中的softline等,而在HughesPJ中,您必须使用fcat或fsep。我还没有弄清楚它们在功能上是否相当,但是group似乎更直观... - Evan Laforge
2
我编写了wl-pprint-text,发现最终结果比我之前使用的pretty速度大大提高。此外,在缩进和间距方面,wl-pprint存在一些问题,我在wl-pprint-text中进行了修复。 - ivanm
2
是的,我看到“修复了一些问题”这个说法有点让我担心。当然,你修复了这些问题很好,但是你是否将这些修复提交回其他库中呢?(是的,所有4个库都要提交...) - Evan Laforge
1
@EvanLaforge 当时,我认为wl-pprint的维护者失踪了(我刚好现在偶然发现了你的回复)...而其他库还不存在。 - ivanm
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - sinelaw
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接