5

我使用wl-pprint包,因为标准 PrettyPrinter 缺乏功能。一切都很好,除了函数中的空文档vcat(与<$>组合器相同)。

正确行为:

import Text.PrettyPrint
> vcat[text "a", empty, text "b"]   
a
b

wl-pprint 显示一个额外的空行:

import Text.PrettyPrint.Leijen
> vcat[text "a", empty, text "b"]   
a

b

那么我能做什么呢?过滤 vcat 列表是不可能的,因为Eq没有Doc.

4

2 回答 2

1

因为没有更好的想法,所以在源码中做了如下改动

(<$$>) :: Doc -> Doc -> Doc
x <$$> Empty    = x                   -- <<< added
Empty <$$> y    = y                   -- <<< added
x <$$> y        = x <> linebreak <> y
于 2012-06-27T13:35:07.737 回答
0

定义 vcatSoft = fold <//>

文档说“文档 (vcat xs) 用 (). 垂直连接所有文档 xs。”,然后查看<$$>,它说它“连接文档 x 和 y,中间有一个换行符”。但请注意下一个函数 ,<//>它使用 asoftbreak代替。而且看vcat的defn,很简单vcat = fold <$$>,所以定义一个函数= fold <//>

于 2012-06-18T17:27:14.167 回答