Я ищу функцию вроде 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)]
хорошо, я забыл, что «print» более точно называется «show» в haskell ... есть «симпатичное шоу» пакет. однако кажется, что он просто вызывает show
, анализирует строку и пытается вывести ее в удобном виде. я действительно хочу что-то, что предоставляет новую структуру классов, например class PrettyShow a where prettyShow :: a -> String
.
pretty-show
не подходит для моей ситуации; его выход почти не отличается. Я пишу что-то с помощью монады, отслеживающей отступы; если код превратится во что-то достаточно хорошее, может быть, я выложу его на hackage. Кроме того, я хочу написать экземпляры PrettyShow
для моих пользовательских классов точно так же, как сейчас можно писать экземпляры show
.