haskell - Haskell PrettyPrinter 中的空(零高度)文档

标签 haskell pretty-print

有没有办法在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 的空文档(以及您的 emptyDocemptyDoc = Empty)。

这似乎有点不妥当。也许会考虑对库进行补丁以添加真正的空文档;这肯定是最干净的方法。

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

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

关于haskell - Haskell PrettyPrinter 中的空(零高度)文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52840204/

相关文章:

haskell - 代数解释多态性

haskell - 不断发展的数据结构

haskell - Haskell 如何处理重载多态性?

string - 为什么 Haskell 无法读取 "7e7"但能够读取 "7a7"?

c++ - 漂亮的打印嵌套 vector 图

java - 如何打印ArrayLists的ArrayList,以便将每个内部列表打印在一行上?

json - 如何在 Delphi 中漂亮地打印 JSON?

haskell - 提升、返回和变压器类型构造函数

r - 如何使用 Rmarkdown 在 Word 文档中重复包含 R 代码?

parsing - 用于很好地格式化 Bison/Yacc 语法文件的实用程序?