Должен ли я предоставить [экземпляр show для каждого типа?]
Нет, потому что вы автоматически получили Show
:
data Letter = A | B | C deriving (Show)
-- ^^^^^^^^^^^^^^^ Here
Однако, если вы хотите «умнее» show
, например, отображать пользовательский список как [1,2,3]
, а не беспорядок конструкторов, вам придется написать его самостоятельно.
Вы можете сделать то же самое для ряда классов (включая Eq
, Ord
, Read
, Enum
и Bounded
), но большинство классов, включая определяемые пользователем классы, должны быть реализованы вручную без использования определенных языковых расширений.
Я понимаю, что для вложенных типов вы должны предоставить Показать реализацию [...]
Вы нет! Например, я могу написать это:
data Maybe a = Just a | Nothing deriving (Show)
И компилятор автоматически добавит необходимые ограничения, несмотря на то, что это «вложенный» тип.
Просто получить имя свойства / имя конструктора и ToString-it?
В Хаскеле нет «свойств» - не думайте с точки зрения C # здесь. show
является эквивалентом ToString
. Тем не менее, форма отражения типа доступна в TypeReps , хотя я бы посоветовал не использовать это, пока у вас не будет четкого понимания Haskell.