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