
On Wed, 24 Oct 2007, Duncan Coutts wrote:
On Tue, 2007-10-23 at 22:21 +0200, Henning Thielemann wrote:
Does Cabal not support things like packages within a package simply because Haskell libraries currently are not complex enough to require such a feature, or is there a guiding design principle with which these features are incompatible?
It was requested several times but it seems not to be designed and implemented so easily.
The design choice is that the Cabal package is the unit of distribution. Of course what one sees as a system may well consist of multiple interdependent packages.
The direction I think we're moving in is to try to improve our tools to make it easier for developers to work with systems that consist of multiple packages. However from the distribution and installation point of view, nothing needs to change, the package remains the unit of distribution.
As far as I can see that covers all the cases where we might want "distributions", "shipments" or "sub-packages". Of course if anyone has any examples where they think our model might not cover things we should bring them up and consider them.
If it becomes much easier to handle multiple packages this might work. - Recompiling multiple packages must be simplified, because I use Cabal in the development phase. If one "sub-package" changes it must be simple to recompile the package set and to import modified "sub-packages" without their installation. (Because installation might overwrite valid code with buggy code.) This includes finding the right order of package compilation according to the package dependencies. (I have even some code using FGL for this task, if someone is interested.) - It must be simple to distribute and to download multiple packages that belong together. It would be nice if one could maintain several packages which share the same 'src' directory in one darcs repository, which is of course duplicated on distribution. Say Foo.cabal Hs-Source-Dirs: src Exposed-Modules: Data.Structure.Foo Bar.cabal Hs-Source-Dirs: src Exposed-Modules: Data.Structure.Bar FooDemo.cabal Hs-Source-Dirs: demo Main-Is: FooDemo.hs BarDemo.cabal Hs-Source-Dirs: demo Main-Is: BarDemo.hs src/Data/Structure/Foo.hs src/Data/Structure/Bar.hs demo/FooDemo.hs demo/BarDemo.hs