ABSTRACT
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. This paper presents an empirical study that covers the evolution of fourteen Long-Term Support (LTS) releases (period 2014 - 2020) of available packages (12.46 gigabytes), including the use of monads from the mtl package that provides the standard monad core (e.g., state, reader, continuations). To the best of our knowledge, this is the first large-scale analysis of the evolution of the Stackage repository with regard to packages used and monads. Our findings show, for example, a growing trend of packages is depending on other packages whose versions are not available in a particular release of Stackage; opening a potential stability issue. Like previous studies, these results may evidence how developers use Haskell and give guidelines to Stackage maintainers.
- Algehed, M., and Russo, A. Encoding DCC in Haskell. In Proceedings of the 2017 Workshop on Programming Languages and Analysis for Security (Dallas, USA, Oct. 2017), ACM, pp. 77--89.Google ScholarDigital Library
- Benton, N., Hughes, J., and Moggi, E. Monads and Effects. In Applied Semantics (Caminha, Portugal, Sept. 2002), G. Barthe, P. Dybjer, L. Pinto, and J. Saraiva, Eds., pp. 42--122.Google ScholarCross Ref
- Bezirgiannis, N., Jeuring, J., and Leather S. Usage of Generic Programming on Hackage. In Proceedings of the 9th ACM SIGPLAN workshop on Generic programming - WGP '13 (New York, USA, 2013), p. 47.Google ScholarDigital Library
- Chinthanet, B., Kula, R. G., McIntosh, S., Ishio, T., Ihara, A., and Matsumoto, K.. Lags in the release, adoption, and propagation of npm vulnerability fixes. Empirical Software Engineering 26, 3 (may 2021), 47.Google Scholar
- De Meuter, W. Monads as a theoretical foundation for aop. In International Workshop on Aspect-Oriented Programming at ECOOP (Jyvåskylå, Finland, June 1997), vol. 25, pp. 31--36.Google Scholar
- Decan, A., Mens, T., Claes, M., and Grosjean, P. On the Development and Distribution of R Packages. In Proceedings of the 2015 European Conference on Software Architecture Workshops (New York, NY, USA, sep 2015), ACM, pp. 1--6.Google ScholarDigital Library
- Decan, A., Mens, T., and Constantinou, E. On the Evolution of Technical Lag in the NPM Package Dependency Network. In 2018 IEEE International Conference on Software Maintenance and Evolution (ICSME) (sep 2018), IEEE, pp. 404--414.Google Scholar
- Decan, A., Mens, T., and Grosjean, P. An Empirical Comparison of Dependency Network Evolution in Seven Software Packaging Ecosystems. Empirical Software Engineering 24, 1 (feb 2019), 381--416.Google ScholarDigital Library
- Figueroa, I. A Preliminary Assessment of how Monads are Used in Haskell. In Proceedings of the 21st Brazilian Symposium on Programming Languages (New York, NY, USA, sep 2017), ACM, pp. 1--7.Google ScholarDigital Library
- Figueroa, I., Leger, P., and Fukuda, H. Which Monads Haskell Developers Use: An Exploratory Study. Science of Computer Programming 201 (2021), 102523.Google ScholarCross Ref
- Gamma, E., Helm, R., Johnson, R., and Vlissides, J. Design Patterns: Elements of Reusable Object-Oriented Software. Professional Computing Series. Addison-Wesley, October 1994.Google Scholar
- Gonzalez-Barahona, J. M., Sherwood, P., Robles, G., and Izquierdo, D. Technical lag in software compilations: Measuring how outdated a software deployment is. In Open Source Systems: Towards Robust Practices (Buenos Aires, Argentina, May 2017), Springer International Publishing, pp. 182--192.Google ScholarCross Ref
- Hackage. A central package repository for Haskell, Sept. 2020. http://hackage.haskell.org. Last visited: 01/04/2021.Google Scholar
- Haskell. The Haskell Language, Sept. 2020. http://www.haskell.org. Last visited: 01/04/2021.Google Scholar
- haskell.org. Haskell Cabal, Apr. 2020. Last visited: 09/04/2021.Google Scholar
- Hemmati, H., Nadi, S., Baysal, O., Kononenko, O., Wang, W., Holmes, R., and Godfrey, M. W. The MSR Cookbook: Mining a Decade of Research. In Proceedings of the 10th Working Conference on Mining Software Repositories (Piscataway, NJ, USA, 2013), MSR '13, IEEE Press, pp. 343--352.Google Scholar
- Jaskelioff, M. Monatron: An Extensible Monad Transformer Library. Lecture Notes in Computer Science 5836 (2011), 233--248.Google ScholarCross Ref
- Jones, M. P. Functional programming with overloading and higher-order polymorphism. In Advanced Functional Programming, First International Spring School on Advanced Functional Programming Techniques-Tutorial Text (Båstad, Sweden, May 1995), pp. 97--136.Google ScholarDigital Library
- Kikas, R., Gousios, G., Dumas, M., and Pfahl, D. Structure and Evolution of Package Dependency Networks. In 2017 IEEE/ACM 14th International Conference on Mining Software Repositories (MSR) (may 2017), IEEE, pp. 102--112.Google Scholar
- Liang, S., Hudak, P., and Jones, M. Monad transformers and modular interpreters. pp. 333--343.Google Scholar
- Matplotlib. Matplotlib: A Library for Creating Static, Animated, and Interactive Visualizations in Python, Apr. 2021. http://matplotlib.org. Last visited: 01/04/2021.Google Scholar
- Moggi, E. Computational lambda-calculus and monads. University of Edinburgh, 1988.Google Scholar
- Moggi, E. Notions of computation and monads. Information and Computation 93, 1 (1991), 55--92.Google ScholarDigital Library
- Morris, J. G. Experience Report: Using Hackage to Inform Language Design. In Proceedings of the Third ACM Haskell Symposium on Haskell (2010), Haskell '10, pp. 61--66.Google ScholarDigital Library
- npm. Build Amazing Things, Apr. 2021. https://www.npmjs.com. Last visited: 08/04/2021.Google Scholar
- Pandas. A Fast, Powerful, Flexible and Easy to use Open Source Data Analysis and Manipulation Tool, Apr. 2021. https://pandas.pydata.org. Last visited: 09/04/2021.Google Scholar
- Plakidas, K., Schall, D., and Zdun, U. Evolution of the R Software Ecosystem: Metrics, Relationships, and their Impact on Qualities. Journal of Systems and Software 132 (oct 2017), 119--146.Google Scholar
- PYPI. Find, Install and Publish Python Packages with the Python Package Index, Apr. 2021. https://pypi.org. Last visited: 08/04/2021.Google Scholar
- Scrapy. An Open Source and Collaborative Framework for Extracting the Data you need from Websites, Apr. 2020. https://www.scrapy.org. Last visited: 09/04/2021.Google Scholar
- Stackage. Stackage: A Curated Repository for Stable Haskell Packages, Apr. Sept. https://www.stackage.org. Last visited: 01/04/2021.Google Scholar
- Tarjan, R. Depth-First Search and Linear Graph Algorithms. SIAM journal on computing 1, 2 (1972), 146--160.Google Scholar
- Wadler, P. Comprehending monads. In Proceedings of the 1990 ACM Conference on LISP and Functional Programming (Nice, France, June 1990), pp. 61--78.Google ScholarDigital Library
- Wadler, P. Monads for functional programming. In International School on Advanced Functional Programming (Båstad, Sweden, May 1995), pp. 24--52.Google ScholarCross Ref
Index Terms
- Evolution of a haskell repository and its use of monads: an exploratory study of stackage
Recommendations
A preliminary assessment of how monads are used in Haskell
SBLP '17: Proceedings of the 21st Brazilian Symposium on Programming LanguagesMonads are a denotational approach to embed and reason about notions of computation such as mutable state, I/O, exceptions, and many others. Even though monads are technically language-agnostic, they are mostly associated to the Haskell language. Indeed,...
Making monads first-class with template haskell
Haskell '08: Proceedings of the first ACM SIGPLAN symposium on HaskellMonads as an organizing principle for programming and semantics are notoriously difficult to grasp, yet they are a central and powerful abstraction in Haskell. This paper introduces a domain-specific language, MonadLab, that simplifies the construction ...
Making monads first-class with template haskell
HASKELL '08Monads as an organizing principle for programming and semantics are notoriously difficult to grasp, yet they are a central and powerful abstraction in Haskell. This paper introduces a domain-specific language, MonadLab, that simplifies the construction ...
Comments