Haskell prettyprinter中的空文档(零高度)

时间:2018-10-16 16:37:50

标签: haskell pretty-print

是否可以在prettyprinter中创建零高度的空文档? emptyDoc的高度为1,然后导致空行。我也想避免使用Maybes解决此问题。

1 个答案:

答案 0 :(得分:1)

否,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 )。

这似乎有些不明智。也许可以考虑为库添加一个真正的空文档的补丁。这肯定是最干净的方法。

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

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