Where should we keep a list of all the things that would be nice to have? Is this a good place?
None of these are easy to implement, but the research has at least (with the exception of the last) already been done.
Dealing with many versions
Avoiding churn in the first place
Where should we keep a list of all the things that would be nice to have? Is this a good place?
None of these are easy to implement, but the research has at least (with the exception of the last) already been done.
Dealing with many versions
Deprecated reexports (individual items and entire modules) https://gitlab.haskell.org/ghc/ghc/-/issues/4879
CPP checking multiple combinations https://www.youtube.com/watch?v=YupkE1vsZ4o, https://www.cs.cmu.edu/~ckaestne/pdf/FOSD10-typechef.pdf, https://web.engr.oregonstate.edu/~erwig/CC/index.html (Rust also interested https://github.com/rust-lang/rfcs/blob/master/text/1868-portability-lint.md)
Enriched hi files preserving configuration conditionality info. Can align with CPP variable "model" to make sure downstream packages abide by upstream CPP, wherever it leaks into the interface.
Extract backpack "signatures" from regular modules. Good to avoid relying on hi files too much.
Compare two signatures / hi files, lint PVP violations. (
cabal-diffon steroids.)Leverage all the above to check cabal metadata doing an "all combinations" type check.
Leverage all of the above to CI plausible max bound increases when new versions are released, if CI passes notify maintainers/trustees.
Less need for breakage in the first place
Avoiding churn in the first place
Private dependencies, to make version solving more forgiving Private dependencies haskell/cabal#4035
Better exporting https://gitlab.haskell.org/ghc/ghc/-/issues/19507 and other issues.
Make Orphans OK so dependencies can be fewer (and thus downstream breakage less cascading) https://gitlab.haskell.org/ghc/ghc/-/wikis/Rehabilitating-Orphans-with-Order-theory