有没有办法在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)
这些都不对应于高度低于 1 的任何内容 - 最接近的是 Empty
,但这被解释为高度为 1 的空文档(以及您的 emptyDoc
是emptyDoc = Empty
)。
这似乎有点不妥当。也许会考虑对库进行补丁以添加真正的空文档;这肯定是最干净的方法。
另一种可能性是使用注释机制来创建“此 block 的高度为 0”注释,并编写自己的渲染器来处理此注释。
但是在您可能需要 0 高度文档的位置酌情使用 Maybe (Doc foo)
或 [Doc foo]
可能是最直接的方法取得进步。
关于haskell - Haskell PrettyPrinter 中的空(零高度)文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52840204/