2013-09-19 2 views
1

Рассмотрим следующий код в GHCi:разница Haskell в показе data.text

*> 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?

ответ

6

Show экземпляр для R говорит «когда я хочу показать R, напечатать эту строку», и возвращает фактическое Text значение. Если вы хотели, у этого есть отметки о трендах, вам необходимо явно их добавить.

В отличие от этого, s r - это всего лишь значение Text. Он показывает, как всегда показывает Text (идентично String, по-видимому).

Подумайте о экземпляре для Show Int, если это имеет смысл. Когда вы делаете show 5, он возвращает строку, содержащую только символ 5. Когда вы делаете show "5", он возвращает строку, содержащую три символа - цитату, пять и цитату.

Смежные вопросы