Documentation

Helper function for generating a list of instances for a list of named
signatures. For example, in order to derive instances Functor and
ShowF for a signature Exp, use derive as follows (requires Template
Haskell):

Derive an instance of ArbitraryF for a type constructor of any
first-order kind taking at least one argument. It is necessary that
all types that are used by the data type definition are themselves
instances of Arbitrary.

Smart Constructors

Derive smart constructors for a type constructor of any first-order kind
taking at least one argument. The smart constructors are similar to the
ordinary constructors, but an inject is automatically inserted.

Smart Constructors w/ Annotations

Derive smart constructors with products for a type constructor of any
parametric kind taking at least one argument. The smart constructors are
similar to the ordinary constructors, but an injectA is automatically
inserted.

Lifting to Sums

Given the name of a type class, where the first parameter is a functor,
lift it to sums of functors. Example: class ShowF f where ... is lifted
as instance (ShowF f, ShowF g) => ShowF (f :+: g) where ... .