Могу ли я использовать специальные символы, такие как табуляции и новые строки в Show? - PullRequest
0 голосов
/ 11 марта 2019
data Pair = P Int Int

instance Show Pair where
  show (P n1 n2) = (show n1) ++ "\t" ++ (show n2)

Результат:

GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
\Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main             ( labn.hs, interpreted )
Ok, modules loaded: Main.
*Main> show (P 5 6)
"5\t6"

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

Можно ли как-нибудь использовать эти символы с show?

1 Ответ

8 голосов
/ 11 марта 2019

show возвращает строку, а затем, когда вы помещаете ее в GHCi, она делает print . show $ (P 5 6), что эквивалентно putStrLn . show . show $ (P 5 6), который будет печатать все символы.

Проблема в двойном шоу.

То, что вы хотите сделать, это использовать только печать, как print (P 5 6). Если вы используете GHCi, print автоматически применяется к каждому выражению, поэтому вам нужно всего лишь набрать

Prelude> P 5 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...