17

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パッケージにあると思います) )。

このきれいな印刷機能を実装する最も簡単でハッキーでない方法は何ですか?これは私のプロジェクトのごく一部なので、自分できれいな印刷を作成することは避けたいと思います。可能であれば、モジュールの依存関係を避けたいと思います。

4

1 に答える 1

21

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

ボックスパッケージ

シンプルなボックスモデルを使用して、テキストを2次元でレイアウトするためのきれいな印刷ライブラリ...

于 2012-04-24T07:38:40.620 に答える