The rules are expressed as Haskell code, and it is intended that the user can add new rules as required. 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. Features DrIFT comes with a set of rules to produce instances for all derivable classes given in the Hasekell Prelude.
DrIFT performs import chasing to find the definition of a type.
Effort has been made to make the rule interface as easy to use as possible. This is to allow users to add rules to generate code specific to their own projects. As the rules are themselves written in Haskell, the user doesn't have to learn a new language to express rules. I'd be especially interested in any new rules written for it. Feel free to suggest improvements or bug fixes too.