Haskell - легче читать функцию показа? (для отладки)

Я ищу функцию вроде 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)]

edit

хорошо, я забыл, что «print» более точно называется «show» в haskell ... есть «симпатичное шоу» пакет. однако кажется, что он просто вызывает show , анализирует строку и пытается вывести ее в удобном виде. я действительно хочу что-то, что предоставляет новую структуру классов, например class PrettyShow a where prettyShow :: a -> String .

edit 2

pretty-show не подходит для моей ситуации; его выход почти не отличается. Я пишу что-то с помощью монады, отслеживающей отступы; если код превратится во что-то достаточно хорошее, может быть, я выложу его на hackage. Кроме того, я хочу написать экземпляры PrettyShow для моих пользовательских классов точно так же, как сейчас можно писать экземпляры show .

10
задан gatoatigrado 22 July 2011 в 18:57
поделиться