Как правильно -напечатать таблицу в Haskell?

Я хотел бы красиво напечатать таблицу -как структуру данных в 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 относится к добавлению дополнительного кода, чтобы столбцы автоматически адаптировались к самой широкой записи.

Я предполагаю, что это сделает "sizedText" с максимальной длиной каждого столбца, за исключением того, что эта функция не является частью модуля Haskell Platform Text.PrettyPrint (связанный пакет Text.Pretty ).

Каков самый простой, не -хакерский способ реализации этой прекрасной -функциональности печати? Это небольшая часть моего проекта, поэтому я бы не хотел писать свою собственную красивую печать -и предпочел бы избегать зависимостей модулей, если это возможно.

17
задан Community 23 May 2017 в 12:34
поделиться