Переопределить метод показа для String / Char в Haskell - PullRequest
5 голосов
/ 19 ноября 2011

У меня есть вопрос: Как я могу переопределить метод show для String или Char? Спасибо.

Ответы [ 2 ]

8 голосов
/ 19 ноября 2011

Поскольку людям, похоже, нравится мой комментарий, вот он как ответ:

Если вы хотите переопределить классы типов для существующих типов, вы можете заключить их в newtype-объявленный тип.Это позволяет вам определять свои собственные реализации без каких-либо фактических накладных расходов во время выполнения (поскольку newtype изоморфно исходному типу, во время выполнения фактический бокс не выполняется).

Это может выглядеть примерно так:

newtype MyChar = MyChar Char

instance Show MyChar where
  show (MyChar c) = "head \"" ++ c : "\""

Вы можете использовать это, обернув Char s MyChar, например:

print $ fmap MyChar "test"

Это распечатает

[head "t",head "e",head "s",head "t"]
2 голосов
/ 19 ноября 2011

Если вы хотите сделать это, значит, вы делаете это неправильно.

По более технической причине см. мой ответ на предыдущий вопрос.

Вы на самом деле должны использовать либо свои собственные a -> String функции (возможно, через собственный класс типов), либо использовать симпатичную библиотеку для печати более подробных выводов (некоторые из которых уже имеют встроенный Pretty класс).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...