Алгебраические типы данных (ADT) в Haskell могут автоматически становиться экземплярами некоторых классов типов (напримерShow
,Eq
), производя их от них.
data Maybe a = Nothing | Just a
deriving (Eq, Ord)
У меня вопрос: как это deriving
работает, т.е. как Haskell знает, как реализовать функции производного класса типов для производного ADT?
Кроме того, почему он deriving
ограничен только определенными классами типов? Почему я не могу написать свой собственный класс типов, который может быть производным?
источник
StandaloneDeriving
в в GHC ручной и haskellwikiИз отчета Haskell 98:
Вот описание того, как получить эти классы типов: http://www.haskell.org/onlinereport/dehibited.html#dehibited-appendix.
источник
Можно использовать Template Haskell для генерации деклараций экземпляров аналогично производным предложениям.
Следующий пример беззастенчиво украден из Haskell Wiki :
источник