Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell--更易于阅读的显示函数?(用于调试)_Haskell_Pretty Print - Fatal编程技术网

Haskell--更易于阅读的显示函数?(用于调试)

Haskell--更易于阅读的显示函数?(用于调试),haskell,pretty-print,Haskell,Pretty Print,我正在寻找一个像show这样的函数,它可以产生更可读的输出。当然,它不必在所有类上都起作用。我在谷歌上搜索了“haskell pretty print”,但这似乎产生了编译器源代码打印机。调试以下内容(为stackoverflow格式手动插入换行符)很困难 (fromList [(Ref {name = "phi", lenRef = 4},fromList [CompNode {val = 1, ident = CNId {uid = 4, zone = 0}, deps = []}

我正在寻找一个像show这样的函数,它可以产生更可读的输出。当然,它不必在所有类上都起作用。我在谷歌上搜索了“haskell pretty print”,但这似乎产生了编译器源代码打印机。调试以下内容(为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中“print”更准确地称为“show”。。。有一个“美丽秀”套餐。然而,它似乎只是调用
show
,解析字符串,并尝试以一种好的方式输出它。我真的想要一些公开新类结构的东西,例如
类PrettyShow a where PrettyShow::a->String

编辑2
pretty show
不适合我的情况;它的产出几乎没有什么不同。我正在用一个单子记录缩进;如果代码演变成足够好的东西,也许我会把它发布在hackage上。此外,我想为我的自定义类编写
PrettyShow
实例,就像当前可以编写
show
实例一样。

show函数实际上并不是为了产生可读性好的输出。如果从
派生
子句和中查看默认实现,很明显
show
read
旨在作为简单序列化的一种形式。此外,序列化格式预期可作为Haskell源解析,以便(假设相关定义在范围内)将
show
的输出解释为表达式,给出一个相当于用
read
反序列化的值

如果你想要一个漂亮的、格式化的输出,它看起来不像Haskell源代码,那么标准术语仍然是“漂亮的打印”,并且没有标准的通用方法来实现。不过,如果您浏览一下Hackage,就会发现有一些漂亮的打印库提供了构建自己漂亮打印机的原语。注意,即使他们谈论这只是一个例子;任何树状结构都应该同样有效


作为一个快速的选择,您可能希望
show
的输出至少是更好的准源代码。这是合理和可能的,因为
read
足够聪明,可以忽略空格等。以“尽可能做最愚蠢的事情”的方式提供此功能:它将
show
的输出解析为Haskell源代码,然后将其打印出来。实际上,这很有效。

你说pretty show的算法(调用
show
,解析字符串,尝试以一种好的方式输出)对你来说不够好。为什么?它有什么不足之处?