Я хотел бы отпечатать табличную структуру данных в 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
В настоящее время я реализовал эту функциональность в Text.PrettyPrint, которая поставляется с самой последней версией платформы Haskell. К сожалению оператор < + > ориентирует многострочные документы "по диагонали" друг от друга.
например,
(text "a" $+$ text "b") <+> (text "c" $+$ text "d")
отображается как
a
b c
d
а не
a c
b d
В результате я переношу ячейки и сначала объединять их по горизонтали, а затем вертикально, но это приводит к тому, что столбцы не выравниваются.
В более старом таблице довольно печатном вопросе augustss ссылается на добавление еще некоторого кода, чтобы колонки автоматически адаптировались к самой широкой записи.
Я предполагаю, что "sizeText" с максимальной длиной каждого столбца будет делать это, за исключением того, что эта функция не является частью модуля Text.PrettyPrint платформы Haskell (я думаю, что это в тесно связанном тексте. Довольно пакет).
Какой простейший не-хакерский способ реализации этой красивой печати? Это небольшая часть моего проекта, поэтому я бы не хотел писать свою собственную довольно-печатную версию, и я предпочел бы избегать зависимостей модулей, если смогу.