Description
Cabal 3.0 introduced the library:visibility
field.
Should we use it to define the single-library-component happy-*
packages as "sublibraries"? Depending on such a library is exemplified here: haskell/cabal#9480 (comment). For us it would lead to names such as happy:tabular
.
Defining such public sublibraries is exemplified here: https://github.com/BlockScope/plugins-for-blobs/blob/develop/plugins-for-blobs.cabal. Note the visibility: public
fields.
Pros:
- No separate .cabal file, change log, package description, supported versions, etc. for each package to maintain. I think this is huge, because maintainer time is scarce.
Cons:
- Needs Cabal 3.0 (released in 2019).
Given that
- we already decided to lock into the GHC ecosystem
cabal-install
is easily buildable with older GHCs- older
happy
versions will continue to build with ancient GHCs and accept the same .y-file syntax,
I don't think requiring Cabal 3.0 is much of a drawback. On the other hand I do see the real costs associated with release management if we stick to one executable package and 5 library packages, all of which need to keep their versions in sync etc.
This decision has potential to lock us in for quite a long time, as happy-tabular
is a library name (technically a package name which implicitly denotes the default library) than happy:tabular
. I would like to have the Go from @int-index, @Ericson2314 and @andreasabel on this.