2012-06-18 51 views
4

我使用wl-pprint包,因爲標準PrettyPrinter缺少功能。一切都很好,除了vcat函數中的空文檔(與<$>組合器相同)。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 

所以,我該怎麼辦?過濾vcat列表是不可能的,因爲Doc沒有Eq實例。

+0

樣子的lib可以使用一個'isEmpty'功能,或諸如此類的東西以下更改。請聯繫軟件包作者,並可能向他發送一個適用於您的補丁。 – jberryman

回答

0

因爲我已經沒有什麼更好的想法,我做的源

(<$$>) :: Doc -> Doc -> Doc 
x <$$> Empty = x     -- <<< added 
Empty <$$> y = y     -- <<< added 
x <$$> y  = x <> linebreak <> y 
0

定義 vcatSoft = fold <//>

docs說「的文件(VCAT XS)連接的所有文件與垂直XS()」,並期待在<$$>,它說,它「會連接文件x和y在斷行之間。」但請注意下一個函數<//>,它使用softbreak代替。看看vcat的defn,它只是vcat = fold <$$>,所以定義一個函數= fold <//>

+0

該函數已經存在(fillCat),但它返回「ab」內聯 – user1374768

+0

唉,我知道我應該測試這個。更仔細地閱讀:儘管空白沒有內容,但其確實具有1的「高度」並且行爲完全像(文本「」)(因此不是<$>的單位)。 –