Я ищу функцию, такую как show, которая дает более читаемый вывод. Это, безусловно, не должно работать на всех классах. Я искал "haskell pretty print" в Google, но это, похоже, создает принтеры исходного кода компилятора. Отладка таких вещей, как следующее (новые строки, вставленные вручную для форматирования stackoverflow), сложнее!
(fromList [(Ref {name = "phi", lenRef = 4},fromList [CompNode {val = 1, ident = CNId {uid = 4,
zone = 0}, deps = []},CompNode {val = 2, ident = CNId {uid = 5, zone = 0}, deps = []},CompNode
{val = 3, ident = CNId {uid = 6, zone = 0}, deps = []},CompNode {val = 4, ident = CNId {uid = 7,
zone = 0}, deps = []}] :: Data.Vector.Vector),(Ref {name = "phi'", lenRef = 2},fromList [CompNode
{val = -1, ident = CNId {uid = 0, zone = 0}, deps = []},CompNode {val = -1, ident = CNId {uid = 1,
zone = 0}, deps = []}] :: Data.Vector.Vector),(Ref {name = "psi", lenRef = 2},fromList [CompNode
{val = -1, ident = CNId {uid = 8, zone = 0}, deps = [CompNode {val = 1, ident = CNId {uid = 4, zone
= 0}, deps = []},CompNode {val = 2, ident = CNId {uid = 5, zone = 0}, deps = []}]},CompNode {val =
-1, ident = CNId {uid = 3, zone = 0}, deps = []}] :: Data.Vector.Vector)]
изменить
ладно, я забыл, что "печать" более точно называется "показом" в haskell... есть пакет "довольно-шоу". однако, кажется, просто назовите show
, проанализируйте строку и попытайтесь вывести ее в хорошем виде. я действительно хочу что-то, что раскрывает новую структуру класса, например. class PrettyShow a where prettyShow :: a -> String
.
изменить 2
pretty-show
недостаточно хорош для моей ситуации; его выход практически не отличается. Я пишу что-то с монадой, которая отслеживает отступы; если код превратится во что-то достаточно хорошее, возможно, я опубликую его на хаке. Кроме того, я хочу написать экземпляры PrettyShow
для моих пользовательских классов, так же как в настоящее время можно писать экземпляры show
.