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. Объявления deriving в отдельном блоке
- 6.6.4. Вывод экземпляров дополнительных классов (
Data, и т.д.) - 6.6.5. Обобщенные выведенные экземпляры для newtype
- 6.6.6. Вывод любого другого класса
- 6.6.7. Стратегии вывода
- 6.6.8. Вывод через