Haskell漂亮打印器中的空(零高度)文档

4
prettyprinter中有没有一种方法可以创建一个零高度的空文档?emptyDoc的高度为1,这会导致出现空行。我也想避免使用Maybe来解决这个问题。

你能避免需要它吗?(如果你说一些关于为什么你认为你需要它的事情,我们也许能帮助你避免使用它。) - Daniel Wagner
我正在将几个可选部分组合成报告/文档。虽然可以使用Maybe来避免,但与仅为空文档相比,这只会增加更多的代码。 - Petras Purlys
在 Data.Maybe 中,一个有用的函数可能是 catMaybes :: [Maybe a] -> [a] - Dan Robertson
你不是唯一一个在使用 prettyprinter 时遇到空文档处理问题的人:https://github.com/quchen/prettyprinter/issues/159 欢迎一起讨论! :) - sjakobi
1个回答

2

不,没有这个功能

data Doc ann =
    Fail
    | Empty
    | Char !Char
    | Text !Int !Text
    | Line
    | FlatAlt (Doc ann) (Doc ann)
    | Cat (Doc ann) (Doc ann)
    | Nest !Int (Doc ann)
    | Union (Doc ann) (Doc ann)
    | Column (Int -> Doc ann)
    | WithPageWidth (PageWidth -> Doc ann)
    | Nesting (Int -> Doc ann)
    | Annotated ann (Doc ann)

这些选项中没有任何一个对应高度小于1的内容,最接近的是Empty,但这被解释为高度为1的空文档(而您的emptyDocemptyDoc = Empty)。

这似乎有点不太恰当。也许可以考虑向库添加一个真正的空文档补丁;这肯定是最干净的方法。

另一种可能性是使用注释机制来制作“此块具有0高度”注释,并编写自己的渲染器来处理此注释。

但在需要0高度文档的位置使用Maybe (Doc foo)[Doc foo]可能是最直接的进展方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接