Алгебраические Типы данных (ADT) в Haskell могут автоматически становиться экземплярами некоторых типов (например, Show
, Eq
) путем их получения.
data Maybe a = Nothing | Just a
deriving (Eq, Ord)
Мой вопрос: как работает этот deriving
, т.е. как Haskell знает, как реализовать функции производного типа для получения ADT?
Кроме того, почему deriving
ограничивается только определенными классами? Почему я не могу написать свой собственный класс, который можно получить?