考虑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 r
(实际上,Text
为s r
)?
答案 0 :(得分:6)
Show
的{{1}}实例说“当我想显示R
时,打印此字符串”,并返回实际的R
值。如果你想要这个有引号,你需要明确添加它们。
相比之下,Text
只是s r
值。它显示了Text
始终显示的方式(显然与Text
相同)。
考虑String
的实例,如果这更有意义的话。执行Show Int
时,它返回仅包含show 5
字符的字符串。执行5
时,它会返回一个包含三个字符的字符串 - 引号,五和引号。