如何在Haskell中打印表格?

bak*_*tsu 17 haskell pretty-print

我想在Haskell(列表列表)中绘制一个类似于表的数据结构.

例如...

Table [
    StrCol "strings" ["a", "bc", "c"],
    IntCol "ints" [1, 30, -2],
    DblCol "doubles" [2.0, 4.5, -3.2]]
Run Code Online (Sandbox Code Playgroud)

应该呈现像......

strings ints doubles
    "a"    1     2.0
   "bc"   30     4.5
    "c"   -2    -3.2
Run Code Online (Sandbox Code Playgroud)

目前,我已在最新版本的Haskell平台附带的Text.PrettyPrint中实现了此功能.不幸的是,<+>运算符将多行文档彼此"对角地"定向.

例如

(text "a" $+$ text "b") <+> (text "c" $+$ text "d")
Run Code Online (Sandbox Code Playgroud)

呈现为

a
b c
  d
Run Code Online (Sandbox Code Playgroud)

而不是

a c
b d
Run Code Online (Sandbox Code Playgroud)

因此,我将单元格转置并首先水平合并,然后垂直合并,但这会导致列不对齐.

在较旧的表格漂亮打印问题中,augustss指的是添加更多代码以使列自动适应最宽的条目.

我猜测具有每列最大长度的"sizesText"会这样做,除了这个函数似乎不是Haskell平台Text.PrettyPrint模块的一部分(我认为它与密切相关的Text.Pretty包中有关) ).

实现这种漂亮打印功能的最简单的非hacky方法是什么?这只是我项目的一小部分,所以我想避免编写自己的漂亮打印,如果可以的话,我宁愿避免模块依赖.

Dan*_*ner 21

http://hackage.haskell.org/package/boxes

盒子包装

一个漂亮的打印库,用于使用简单的盒子模型在两个维度上布局文本....