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
その結果、セルを転置して、最初に水平方向に、次に垂直方向に結合しますが、これにより、列が整列されなくなります。
古いテーブルのきれいな印刷の質問では、augustssは、列を最も広いエントリに自動的に適応させるために、さらにいくつかのコードを追加することを指します。
この関数がHaskellPlatformText.PrettyPrintモジュールの一部ではないように見えることを除いて、各列の最大長を持つ「sizedText」がこれを行うと推測しています(密接に関連するText.Prettyパッケージにあると思います) )。
このきれいな印刷機能を実装する最も簡単でハッキーでない方法は何ですか?これは私のプロジェクトのごく一部なので、自分できれいな印刷を作成することは避けたいと思います。可能であれば、モジュールの依存関係を避けたいと思います。