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

Empty (zero height) documents in Haskell prettyprinter

有没有办法在 prettyprinter 中创建零高度的空文档? emptyDoc 的高度为 1,这会导致空行。我也想避免使用 Maybes 来解决这个问题。

没有,there isn't:

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)

None 其中对应于高度小于 1 的任何内容——最接近的是 Empty,但这被解释为高度为 1 的空文档(以及您的 emptyDocemptyDoc = Empty).

好像有点不对劲。也许会考虑给库打个补丁来添加一个真正的空文档;这肯定是最干净的方法。

另一种可能是使用注解机制来做一个"this chunk has height 0"注解,然后编写你自己的渲染器来处理这个注解。

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