Довольно печатать список вертикально в haskell в интерактивной сессии - PullRequest
0 голосов
/ 28 декабря 2018

В сеансе 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" и напечатанная в моем сеансе, является именно темЯ ищу.Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Пакет 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

0 голосов
/ 28 декабря 2018

Одним из решений этой проблемы является:

Prelude> mapM_ putStrLn toprint
1111111111
2222222222
3333333333
4444444444
5555555555
6666666666

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

...