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 的空文档(以及您的 emptyDoc
是 emptyDoc = Empty
).
好像有点不对劲。也许会考虑给库打个补丁来添加一个真正的空文档;这肯定是最干净的方法。
另一种可能是使用注解机制来做一个"this chunk has height 0"注解,然后编写你自己的渲染器来处理这个注解。
但是在您可能需要 0 高度文档的位置适当使用 Maybe (Doc foo)
或 [Doc foo]
可能是取得进展的最直接方法。
有没有办法在 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 的空文档(以及您的 emptyDoc
是 emptyDoc = Empty
).
好像有点不对劲。也许会考虑给库打个补丁来添加一个真正的空文档;这肯定是最干净的方法。
另一种可能是使用注解机制来做一个"this chunk has height 0"注解,然后编写你自己的渲染器来处理这个注解。
但是在您可能需要 0 高度文档的位置适当使用 Maybe (Doc foo)
或 [Doc foo]
可能是取得进展的最直接方法。