Backports of GHC deriving extensions.
deriving-compat provides Template Haskell functions that mimic deriving extensions that were introduced or modified in recent versions of GHC. Currently, the following typeclasses/extensions are covered:
Deriving
BoundedDeriving
EnumDeriving
IxDeriving
EqDeriving
OrdDeriving
ReadDeriving
ShowDeriveFoldableDeriveFunctorDeriveTraversableGeneralizedNewtypeDeriving(with GHC 8.2 or later)DerivingVia(with GHC 8.2 or later)
See the Data.Deriving module for a full list of backported changes.
In addition, deriving-compat also provides some additional deriving functionality that has not yet been merged into upstream GHC. Aside from the GHC deriving extensions mentioned above, deriving-compat also permits deriving instances of classes in the Data.Functor.Classes module, covering the Eq1, Eq2, Ord1, Ord2, Read1, Read2, Show1, and Show2 classes. This extra functionality is outside of the main scope of deriving-compat, as it does not backport extensions that exist in today's GHC. Nevertheless, the underlying Template Haskell machinery needed to derive Eq and friends extends very naturally to Eq1 and friends, so this extra functionality is included in deriving-compat as a convenience.
Note that some recent GHC typeclasses/extensions are not covered by this package:
DeriveDataTypeableDeriveGeneric, which was introducted in GHC 7.2 for derivingGenericinstances, and modified in GHC 7.6 to allow derivation ofGeneric1instances. UseGenerics.Deriving.THfromgeneric-derivingto deriveGeneric(1)using Template Haskell.DeriveLift, which was introduced in GHC 8.0 for derivingLiftinstances. UseLanguage.Haskell.TH.Liftfromth-liftto deriveLiftusing Template Haskell.The
Bifunctortypeclass, which was introduced in GHC 7.10, as well as theBifoldableandBitraversabletypeclasses, which were introduced in GHC 8.2. UseData.Bifunctor.THfrombifunctorsto derive these typeclasses using Template Haskell.
deriving-compat
deriving-compat provides Template Haskell functions that mimic deriving extensions that were introduced or modified in recent versions of GHC. Currently, the following typeclasses/extensions are covered:
- Deriving 
Bounded - Deriving 
Enum - Deriving 
Ix - Deriving 
Eq - Deriving 
Ord - Deriving 
Read - Deriving 
Show DeriveFoldableDeriveFunctorDeriveTraversableGeneralizedNewtypeDeriving(with GHC 8.2 or later)DerivingVia(with GHC 8.2 or later)
See the Data.Deriving module for a full list of backported changes.
In addition, deriving-compat also provides some additional deriving functionality that has not yet been merged into upstream GHC. Aside from the GHC deriving extensions mentioned above, deriving-compat also permits deriving instances of classes in the Data.Functor.Classes module, covering the Eq1, Eq2, Ord1, Ord2, Read1, Read2, Show1, and Show2 classes. This extra functionality is outside of the main scope of deriving-compat, as it does not backport extensions that exist in today's GHC. Nevertheless, the underlying Template Haskell machinery needed to derive Eq and friends extends very naturally to Eq1 and friends, so this extra functionality is included in deriving-compat as a convenience.
Note that some recent GHC typeclasses/extensions are not covered by this package:
DeriveDataTypeableDeriveGeneric, which was introducted in GHC 7.2 for derivingGenericinstances, and modified in GHC 7.6 to allow derivation ofGeneric1instances. UseGenerics.Deriving.THfromgeneric-derivingto deriveGeneric(1)using Template Haskell.DeriveLift, which was introduced in GHC 8.0 for derivingLiftinstances. UseLanguage.Haskell.TH.Liftfromth-liftto deriveLiftusing Template Haskell.- The 
Bifunctortypeclass, which was introduced in GHC 7.10, as well as theBifoldableandBitraversabletypeclasses, which were introduced in GHC 8.2. UseData.Bifunctor.THfrombifunctorsto derive these typeclasses using Template Haskell.