我使用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
个实例。
答案 0 :(得分:0)
定义
vcatSoft = fold <//>
docs说“文档(vcat xs)将所有文档与xs垂直连接()。”,并查看<$$>
,它说“将文档x和y连接到一个换行符”之间。”但请注意下一个函数<//>
,它使用softbreak
代替。看一下vcat的defn,它只是vcat = fold <$$>
,所以定义一个函数= fold <//>
。
答案 1 :(得分:0)
因为我没有更好的想法,所以我在源代码中进行了以下更改
(<$$>) :: Doc -> Doc -> Doc
x <$$> Empty = x -- <<< added
Empty <$$> y = y -- <<< added
x <$$> y = x <> linebreak <> y