Haskell 98 позволяет программисту добавить к объявлению типа данных предложение deriving, чтобы сгенерировать стандартное объявление экземпляра указанного класса. GHC расширяет этот механизм в нескольких направлениях:
- Механизм вывода экземпляров можно использовать отдельно от объявления типа данных с помощью механизма отдельного вывода экземпляров.
- В Haskell 98 автоматически выводить экземпляры можно только для классов
Eq,Ord,Enum,Ix,Bounded,ReadиShow. Различные расширения языка дополняют этот список. -
Помимо стандартного подхода к выводу экземпляров, при котором генерируются определения всех методов, GHC поддерживает ещё две стратегии вывода, позволяющие выводить экземпляры произвольных классов:
- Обобщённый вывод экземпляров для newtype для типов newtype и
- вывод экземпляра любого класса с помощью пустого объявления экземпляра.
Пользователь может при желании указать нужную стратегию вывода, особенно если компилятор по умолчанию выбирает неподходящую.
- 6.6.1. Вывод экземпляров для пустых типов данных
- 6.6.2. Вывод контекста для предложений deriving
- 6.6.3. Отдельные объявления вывода экземпляров
- 6.6.4. Вывод экземпляров дополнительных классов (
Dataи т. д.) - 6.6.5. Обобщённый вывод экземпляров для типов newtype
- 6.6.6. Вывод экземпляра любого другого класса
- 6.6.7. Стратегии вывода экземпляров
- 6.6.8. Вывод через (deriving via)