Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

Пакет для пакетов

Довольно печатная библиотека для выкладки текста в двух измерениях, используя простую коробчатую модель....