在字符串上显示不是id函数?

时间:2012-05-28 16:52:20

标签: haskell

有人可以向我解释为什么字符串上的 show 函数不是 id 函数吗?例如

show (show 42)将返回"\"42\""奇怪的东西,对我来说不是本质的。

2 个答案:

答案 0 :(得分:8)

show如果只是将某些内容转换为任意字符串(如Java中的toString),则不是很有用。如果结果 易于阅读和机器可读,则更有用,因此show的常见用法是生成值为{{1}的序列化表示因此,您可以使用show再次读取它,并且对于read的大多数实现也是如此,以便您可以在Haskell中键入show n的字符串REPL与show类似,并返回反序列化的值。

因此,如果您有ghci"42"之类的字符串,则需要获取字符串show,因为当您在{{1}中键入"\"42\""时(和等效使用42函数),您得到一个数字,而当您在ghci中键入read时,您将获得所需的字符串。

答案 1 :(得分:6)

因为readshow的倒数。所以我应该始终read show的结果,并获得一个字符串。

> (read "42")::String
"*** Exception: Prelude.read: no parse
> (read "\"42\"")::String
"42"