deriving-compat
[][Hackage: deriving-compat] [][Haskell.org] [][tl;dr Legal: BSD3]
[Hackage: deriving-compat]: http://hackage.haskell.org/package/deriving-compat "deriving-compat package on Hackage" [Haskell.org]: http://www.haskell.org "The Haskell Programming Language" [tl;dr Legal: BSD3]: https://tldrlegal.com/license/bsd-3-clause-license-%28revised%29 "BSD 3-Clause License (Revised)"
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:
Bounded
Enum
Ix
Eq
Ord
Read
Show
DeriveFoldable
DeriveFunctor
DeriveTraversable
GeneralizedNewtypeDeriving
(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:
DeriveDataTypeable
DeriveGeneric
, which was introducted in GHC 7.2 for deriving Generic
instances, and modified in GHC 7.6 to allow derivation of Generic1
instances. Use Generics.Deriving.TH
from generic-deriving
to derive Generic(1)
using Template Haskell.DeriveLift
, which was introduced in GHC 8.0 for deriving Lift
instances. Use Language.Haskell.TH.Lift
from th-lift
to derive Lift
using Template Haskell.Bifunctor
typeclass, which was introduced in GHC 7.10, as well as the Bifoldable
and Bitraversable
typeclasses, which were introduced in GHC 8.2. Use Data.Bifunctor.TH
from bifunctors
to derive these typeclasses using Template Haskell.