1

考虑下面的代码GHCi

*> data R = R { s :: Text }
*> instance Show R where show x = unpack $ s x
*> let r = R $ pack "¶"
*> r
¶
*> s r
"\182"

为什么它显示没有引号的段落符号以及显示R数据类型时。并且在显示时显示为[Char](实际上:t s rTexts r

4

1 回答 1

6

Show实例R说“当我想显示一个R,打印这个字符串”,并返回实际Text值。如果您希望它带有引号,则需要显式添加它们。

相比之下,s r只是一个Text值。它显示了Text始终显示的方式(String显然与 相同)。

想想 的实例Show Int,如果这更有意义的话。当你这样做时show 5,它会返回一个只包含一个5字符的字符串。当您这样做时show "5",它会返回一个包含三个字符的字符串 - 一个引号、一个 5 和一个引号。

于 2013-09-19T20:20:39.860 回答