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

whd*_*whd 4 haskell

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

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

dfl*_*str 8

show如果它只是将某些东西转换为任意字符串(如toStringJava中),则不是很有用.这是更有益的,如果结果是容易阅读和机器可读的,所以常见的用途show是生产,你是值的序列化表示showING,这样就可以在再次使用读它read,而且,对于大多数实现show,以便您可以show在Haskell REPL中键入n 的字符串ghci并返回反序列化的值.

所以,如果你有一个字符串像"42",并且show它,你想要得到的字符串"\"42\"",因为当你输入42ghci(和等价使用read功能),你会得到一个号码,而当你键入"42"ghci,你得到的字符串,你想.


gcb*_*son 6

因为read是倒数show.所以我应该始终能够read得到结果show,并获得一个String.

> (read "42")::String
"*** Exception: Prelude.read: no parse
> (read "\"42\"")::String
"42"
Run Code Online (Sandbox Code Playgroud)