我想在Haskell中创建一个类似于表的数据结构(列表列表)。
例如......
Table [
StrCol "strings" ["a", "bc", "c"],
IntCol "ints" [1, 30, -2],
DblCol "doubles" [2.0, 4.5, -3.2]]
应该渲染类似......
strings ints doubles
"a" 1 2.0
"bc" 30 4.5
"c" -2 -3.2
目前,我已在最新版本的Haskell平台附带的Text.PrettyPrint中实现了此功能。不幸的是< +>操作员将多行文档彼此“对角线”定位。
例如
(text "a" $+$ text "b") <+> (text "c" $+$ text "d")
呈现为
a
b c
d
而不是
a c
b d
结果,我转移单元格并首先将它们水平合并,然后垂直合并,但这会导致列不对齐。
在较早的table pretty-printing question中,augustss指的是添加更多代码以使列自动适应最宽的条目。
我猜测具有每列最大长度的“sizedText”会这样做,除了这个函数似乎不是Haskell平台Text.PrettyPrint模块的一部分(我认为它在密切相关的文本中) .Pretty包)。
实现这种漂亮打印功能的最简单的非hacky方式是什么?这只是我项目的一小部分,所以我想避免编写自己的漂亮打印,如果可以,我宁愿避免模块依赖。
答案 0 :(得分:21)
http://hackage.haskell.org/package/boxes
包装盒
一个漂亮的打印库,用于使用简单的盒子模型在两个维度上布置文本....