Template Haskell code to implement default implementations for type-class
functions based on which functions are already implemented. Currently extremely
crude but still fairly effective.
When defining a type class with many functions, each of which can be
implemented based on arbitrary subsets of the others, the standard
default-implementation concept breaks down quite badly. This library provides a
system by which more complex rules can be described for choosing default
implementations based on which ones the user supplies. These implementations
can additionally be given "suitability scores", so that when multiple possible
choices could be made, the library can choose the "best" one.