The favourite customer for FDs has been the monad transformer library.
(There are at least two versions, but they have the same requirements.)
In this library, all the dependencies are full, i.e. involve all (both)
the arguments of the class, e.g.
class (Monoid w, Monad m) => MonadWriter w m | m -> w
Instances of these classes are of two kinds:
1) Base cases: the range argument is a variable that occurs in the domain
argument, e.g.
instance (Monoid w, Monad m) => MonadWriter w (WriterT w m)
2) Inductive definitions: the range argument is a variable that is
determined by variables in the domain argument via an FD (on the
same class) in the context of the instance, e.g.
instance (Error e, MonadWriter w m) => MonadWriter w (ErrorT e m)
What other libraries should Haskell' support, and what are their
requirements?