The DrIFT package

DrIFT is a type sensitive preprocessor for Haskell. It extracts type declarations
and directives from modules. The directives cause rules to be fired on the parsed
type declarations, generating new code which is then appended to the bottom of the input
file. The rules are expressed as Haskell code, and it is intended that the user can add new
rules as required.

DrIFT automates instance derivation for classes that aren't supported by the standard compilers.
In addition, instances can be produced in seperate modules to that containing the type declaration.
This allows instances to be derived for a type after the original module has been compiled.
As a bonus, simple utility functions can also be produced from a type.