Context. Package repositories for a programming language are increasingly common. A repository can keep a register of the evolution of its packages. In the programming language Haskell, with its defining characteristic monads, we can find the Stackage repository, which is a curated repository for stable Haskell packages in the Hackage repository. Despite the widespread use of Stackage in its industrial target, we are not aware of much empirical research about how this repository has evolved, including the use of monads. Objective. This paper conducts empirical research about the evolution of Stackage considering monad packages through 22 Long-Term Support releases during the period 2014-2023. Focusing on five research questions, this evolution is analyzed in terms of packages with their dependencies and imports; including the most used monad packages. To the best of our knowledge, this is the first large-scale analysis of the evolution of the Stackage repository regarding packages used and monads. Method. We define six research questions regarding the repository's evolution, and analyze them on 51,716 packages (17.05 GB) spread over 22 releases. For each package, we parse its cabal file and source code to extract the data, which is analyzed in terms of dependencies and imports using Pandas scripts. Results. From the methodology we get different findings. For example, there are packages that depend on other packages whose versions are not available in a particular release of Stackage; opening a potential stability issue. The mtl and transformers are on the top 10 packages most used/imported across releases of the Stackage evolution. We discussed these findings with Stackage maintainers, which allowed us to refine the research questions.
翻译:背景。编程语言的包仓库日益普遍。仓库可以记录其包的演化过程。在以其标志性单子为特征的编程语言 Haskell 中,我们可以找到 Stackage 仓库,这是 Hackage 仓库中经过精心挑选的稳定 Haskell 包集合。尽管 Stackage 在其工业目标领域被广泛使用,但我们尚未发现关于该仓库(包括单子的使用)如何演化的实证研究。目的。本文通过 2014-2023 年间的 22 个长期支持版本,对 Stackage 的演化(考虑单子包)进行实证研究。围绕五个研究问题,从包及其依赖和导入的角度分析这种演化,包括最常用的单子包。据我们所知,这是首次对 Stackage 仓库在包使用和单子方面的演化进行大规模分析。方法。我们定义了六个关于仓库演化的研究问题,并基于跨越 22 个版本的 51,716 个包(17.05 GB)进行分析。针对每个包,我们解析其 cabal 文件和源代码以提取数据,并使用 Pandas 脚本从依赖和导入的角度进行分析。结果。从该方法中我们得到了不同的发现。例如,有些包依赖于其他包,但这些依赖包的版本在 Stackage 的特定版本中不可用,这引出了潜在的稳定性问题。`mtl` 和 `transformers` 是 Stackage 演化过程中各版本中最常用/导入的十大包之一。我们与 Stackage 维护者讨论了这些发现,从而得以完善研究问题。