I’m facing this right now, exporting a mono-repo project to cabal. I think cabal is just not designed for multiple libraries / executables, so there is no satisfactory solution as long as cabal is involved (neither my personal nor work projects use cabal), but I chose 1, with the caveat that they still all have to live in independent root directories or cabal will try to redundantly compile even undeclared and un-imported modules. The reason is I didn’t want to have to deal with all the redundant names and versions. However, I’m beginning to have second thoughts, because given that generating cabal files is inevitable and everyone living in their own directory required anyway, it’s not much extra work for the generator to make up versions and set them all equal. And 2 is definitely better supported and with a longer history, while 1 is still considered new and likely buggy.
If I do wind up with 2, I’ll just have to document that these are not independent packages, and it’s your own problem if you try to treat them that way (in other words, version will always require exact matches). That’s nonstandard so it’s motivation to stick with 1 unless forced off by bugs.