5

標準の PrettyPrinter には機能がないため、 wl-pprintパッケージを使用します。関数内の空のドキュメントを除いて、すべて問題ありません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

それで、なにかお手伝いできますか?Eqのインスタンスがないため、vcat リストをフィルタリングすることはできません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 を連結する」と書かれています。しかし、代わりに<//>a を使用する次の関数 に注意してください。softbreakそして、vcat の定義を見る、単純なvcat = fold <$$>ので、関数を定義します= fold <//>

于 2012-06-18T17:27:14.167 に答える