What’s the difference between a “package” and a “module”? Though modules have evolved beyond their low-level origins into richly composable, type-based abstractions, packages are largely stuck in a Linux-like land of version ranges and imprecise specifications.
How can we bring packages up to speed with contemporary module systems? For my first big project, I’m investigating this question in the context of GHC Haskell and its package management system, Hackage/Cabal.