summaryrefslogtreecommitdiff
path: root/docs/users_guide/exts/deriving.rst
blob: d10260b21f80a4caa88c9794bebcc4610436f5b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
.. _deriving:

Deriving mechanism
==================

Haskell 98 allows the programmer to add a deriving clause to a data type
declaration, to generate a standard instance declaration for specified class.
GHC extends this mechanism along several axes:

* The derivation mechanism can be used separately from the data type
  declaration, using the :ref:`standalone deriving mechanism
  <stand-alone-deriving>`.

* In Haskell 98, the only derivable classes are ``Eq``,
  ``Ord``, ``Enum``, ``Ix``, ``Bounded``, ``Read``, and ``Show``. :ref:`Various
  language extensions <deriving-extra>` extend this list.

* Besides the stock approach to deriving instances by generating all method
  definitions, GHC supports two additional deriving strategies, which can
  derive arbitrary classes:

  * :ref:`Generalised newtype deriving <newtype-deriving>` for newtypes and
  * :ref:`deriving any class <derive-any-class>` using an empty instance
    declaration.

  The user can optionally declare the desired :ref:`deriving strategy
  <deriving-strategies>`, especially if the compiler chooses the wrong
  one :ref:`by default <default-deriving-strategy>`.


.. toctree::
    :maxdepth: 1

    empty_data_deriving
    deriving_inferred
    standalone_deriving
    deriving_extra
    newtype_deriving
    derive_any_class
    deriving_strategies
    deriving_via