所以从瞥一眼hackage我可以看到5个漂亮的打印库:
无论如何,他们都是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个几乎但不完全复制粘贴的模块可以做一些整合...
答案 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,但除此之外我没有看到使用第三方的特别令人信服的理由库。