
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.