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.
See the documentation in the "Cartel" module for details.