By specifying your Cabal files in Haskell, you have the power
of Haskell at your disposal to reduce redundancy.  You can
also read in trees of module names dynamically, which saves
you from manually maintaining lists of module names.