在ghci会话中(恰好在jupyter内核中),我想在haskell中垂直打印一个列表。 (在我的用例中,我正在查看CSV,因此此列表代表一列数据,我希望显示内容能够反映出来。)
Prelude> print ["1111111111", "2222222222", "3333333333", "4444444444", "5555555555", "6666666666"]
["1111111111","2222222222","3333333333","4444444444","5555555555","6666666666"]
我正在查看GenericPretty的文档:
http://hackage.haskell.org/package/GenericPretty
我有此数据:
import Text.PrettyPrint.GenericPretty
Prelude> toprint = ["1111111111", "2222222222", "3333333333", "4444444444", "5555555555", "6666666666"]
Prelude> print toprint -- first, show standard print
["1111111111","2222222222","3333333333","4444444444","5555555555","6666666666"]
我要打印漂亮的东西:
Prelude> pretty toprint
"[\"1111111111\",\"2222222222\",\"3333333333\",\"4444444444\",\n \"5555555555\",\"6666666666\"]"
这不太正确。您可以看到它确实添加了一个“ \ n”,但并不是在每一行之后,而且有趣的是,它在交互式会话中也没有作用。它呈现为文本而不是印刷形式。
在python中,我会这样做:
>>> from pprint import pprint as pp
>>> print(['1111111111', '2222222222', '3333333333', '4444444444', '5555555555', '6666666666'])
['1111111111', '2222222222', '3333333333', '4444444444', '5555555555', '6666666666']
>>> pp(['1111111111', '2222222222', '3333333333', '4444444444', '5555555555', '6666666666'])
['1111111111',
'2222222222',
'3333333333',
'4444444444',
'5555555555',
'6666666666']
在我的会话中打印的由“ \ n”分隔的垂直平铺正是我要的内容。我该怎么做?
答案 0 :(得分:1)
Iavor Diatchki的pretty-show
软件包在以下方面做得非常好:https://hackage.haskell.org/package/pretty-show
首先,使用cabal install pretty-show
安装它。然后:
Prelude> import Text.Show.Pretty
Prelude Text.Show.Pretty> putStrLn $ ppShow ["1111111111", "2222222222", "3333333333", "4444444444", "5555555555", "6666666666"]
[ "1111111111"
, "2222222222"
, "3333333333"
, "4444444444"
, "5555555555"
, "6666666666"
]
您甚至可以指示ghci自动执行此操作,因此您不必自己致电ppShow
:
Prelude> import Text.Show.Pretty (ppShow, pPrint)
Prelude Text.Show.Pretty> :set -interactive-print pPrint
Prelude Text.Show.Pretty> ["1111111111", "2222222222", "3333333333", "4444444444", "5555555555", "6666666666"]
[ "1111111111"
, "2222222222"
, "3333333333"
, "4444444444"
, "5555555555"
, "6666666666"
]
您可以将相关说明放入.ghci
文件中,这样,如果您愿意,它会自动发生。有关详情,请参见此博客文章:https://teh.id.au/posts/2017/02/13/interactive-print/index.html
答案 1 :(得分:0)
解决此问题的一种方法是:
Prelude> mapM_ putStrLn toprint
1111111111
2222222222
3333333333
4444444444
5555555555
6666666666
但是我会对使用适当的漂亮打印库感到满意,在该库中,我的灵活性比每条记录的换行符还要多。