On Wed, May 28, 2014 at 2:20 AM, Daniel Trstenjak <daniel.trstenjak@gmail.com> wrote:

Hi Omari,

On Tue, May 27, 2014 at 09:55:59PM -0400, Omari Norman wrote:
> The Cabal file format works very well for small projects. However, in big
> projects with a library, many executables, and test suites, some irritations
> emerge. You need to specify dependencies in multiple places, leading to
> redundancy.

That's not quite true, you can share the dependencies and specify the
modules once, but you have to use a different sub directory for each
section (library, executable, test-suite, benchmark) in the cabal file.

See: https://github.com/dan-t/hsimport/blob/master/hsimport.cabal

This is a solution only where you have shared code that can be pushed into the library.  This may not be practical.  Non-trivial tests, for instance, are going to have dependencies of their own.  See

http://hackage.haskell.org/package/penny-0.32.0.10/penny.cabal

where three separate components must specify dependencies on text, time, and transformers.  This was even after I moved a lot of code to the library for the sole reason of removing Cabal file redundancy.  I could have the library re-export modules from those packages but that is a kludge.