Haskell 98 позволяет программисту добавить «deriving( Eq, Ord )» в объявление типа данных, чтобы сгенерировать стандартное объявление экземпляра для классов, указанных в предложении deriving. В Haskell 98 единственными классами, которые могут появляться в предложении deriving, являются стандартные классы Eq, Ord, Enum, Ix, Bounded, Read и Show.
GHC расширяет этот список несколькими дополнительными классами, которые можно автоматически вывести:
- С помощью
DeriveGenericможно вывести экземпляры классовGenericиGeneric1, определённых вGHC.Generics. Их можно использовать для определения обобщённых функций, как описано в Обобщённое программирование. - С помощью
DeriveFunctorможно вывести экземпляры классаFunctor, определённого вGHC.Base. - С помощью
DeriveDataTypeableможно вывести экземпляры классаData, определённого вData.Data. - С помощью
DeriveFoldableможно вывести экземпляры классаFoldable, определённого вData.Foldable. - С помощью
DeriveTraversableможно вывести экземпляры классаTraversable, определённого вData.Traversable. Поскольку экземплярTraversableопределяет экземплярыFunctorиFoldable, вероятно, стоит вывести и их тоже, поэтомуDeriveTraversableподразумеваетDeriveFunctorиDeriveFoldable. - С помощью
DeriveLiftможно вывести экземпляры классаLift, определённого в модулеLanguage.Haskell.TH.Syntaxпакетаtemplate-haskell.
Также можно использовать отдельное объявление вывода (см. Отдельные объявления вывода).
В каждом случае соответствующий класс должен быть в области видимости перед тем, как его можно будет упомянуть в предложении deriving.