Semantic Versioning Checking in a Declarative Package Manager

Author Michael Hanus

Thumbnail PDF


  • Filesize: 497 kB
  • 16 pages

Document Identifiers

Author Details

Michael Hanus

Cite AsGet BibTex

Michael Hanus. Semantic Versioning Checking in a Declarative Package Manager. In Technical Communications of the 33rd International Conference on Logic Programming (ICLP 2017). Open Access Series in Informatics (OASIcs), Volume 58, pp. 6:1-6:16, Schloss Dagstuhl – Leibniz-Zentrum für Informatik (2018)


Semantic versioning is a principle to associate version numbers to different software releases in a meaningful manner. The correct use of version numbers is important in software package systems where packages depend on other packages with specific releases. When patch or minor version numbers are incremented, the API is unchanged or extended, respectively, but the semantics of the operations should not be affected (apart from bug fixes). Although many software package management systems assumes this principle, they do not check it or perform only simple syntactic signature checks. In this paper we show that more substantive and fully automatic checks are possible for declarative languages. We extend a package manager for the functional logic language Curry with features to check the semantic equivalence of two different versions of a software package. For this purpose, we combine CurryCheck, a tool for automated property testing, with program analysis techniques in order to ensure the termination of the checker even in case of possibly non-terminating operations defined in some package. As a result, we obtain a software package manager which checks semantic versioning and, thus, supports a reliable and also specification-based development of software packages.
  • functional logic programming
  • semantic versioning
  • program testing


  • Access Statistics
  • Total Accesses (updated on a weekly basis)
    PDF Downloads


  1. E. Albert, M. Hanus, F. Huch, J. Oliver, and G. Vidal. Operational semantics for declarative multi-paradigm languages. Journal of Symbolic Computation, 40(1):795-829, 2005. Google Scholar
  2. C. Amaral, M. Florido, and V. Santos Costa. PrologCheck - property-based testing in Prolog. In Proc. of the 12th International Symposium on Functional and Logic Porgramming (FLOPS 2014), pages 1-17. Springer LNCS 8475, 2014. URL:
  3. S. Antoy, R. Echahed, and M. Hanus. A needed narrowing strategy. Journal of the ACM, 47(4):776-822, 2000. URL:
  4. S. Antoy and M. Hanus. Declarative programming with function patterns. In Proceedings of the International Symposium on Logic-based Program Synthesis and Transformation (LOPSTR'05), pages 6-22. Springer LNCS 3901, 2005. Google Scholar
  5. S. Antoy and M. Hanus. Set functions for functional logic programming. In Proceedings of the 11th ACM SIGPLAN International Conference on Principles and Practice of Declarative Programming (PPDP'09), pages 73-82. ACM Press, 2009. URL:
  6. S. Antoy and M. Hanus. Functional logic programming. Communications of the ACM, 53(4):74-85, 2010. URL:
  7. S. Antoy and M. Hanus. Contracts and specifications for functional logic programming. In Proc. of the 14th International Symposium on Practical Aspects of Declarative Languages (PADL 2012), pages 33-47. Springer LNCS 7149, 2012. URL:
  8. S. Antoy and M. Hanus. Default rules for Curry. Theory and Practice of Logic Programming, 17(2):121-147, 2017. URL:
  9. G. Bacci, M. Comini, M.A. Feliú, and A. Villanueva. Automatic synthesis of specifications for first order Curry. In Principles and Practice of Declarative Programming (PPDP'12), pages 25-34. ACM Press, 2012. URL:
  10. B. Braßel, M. Hanus, B. Peemöller, and F. Reck. KiCS2: A new compiler from Curry to Haskell. In Proc. of the 20th International Workshop on Functional and (Constraint) Logic Programming (WFLP 2011), pages 1-18. Springer LNCS 6816, 2011. URL:
  11. J. Christiansen and S. Fischer. EasyCheck - test data for free. In Proc. of the 9th International Symposium on Functional and Logic Programming (FLOPS 2008), pages 322-336. Springer LNCS 4989, 2008. Google Scholar
  12. K. Claessen and J. Hughes. QuickCheck: A lightweight tool for random testing of Haskell programs. In International Conference on Functional Programming (ICFP'00), pages 268-279. ACM Press, 2000. Google Scholar
  13. J. Endrullis and D. Hendriks. Lazy productivity via termination. Theoretical Computer Science, 412(28):3203-3225, 2011. URL:
  14. J.C. González-Moreno, M.T. Hortalá-González, F.J. López-Fraguas, and M. Rodríguez-Artalejo. An approach to declarative programming based on a rewriting logic. Journal of Logic Programming, 40:47-87, 1999. Google Scholar
  15. M. Hanus. Declarative processing of semistructured web data. In Technical Communications of the 27th International Conference on Logic Programming, volume 11, pages 198-208. Leibniz International Proceedings in Informatics (LIPIcs), 2011. URL:
  16. M. Hanus. Functional logic programming: From theory to Curry. In Programming Logics - Essays in Memory of Harald Ganzinger, pages 123-168. Springer LNCS 7797, 2013. URL:
  17. M. Hanus. CurryCheck: Checking properties of Curry programs. In Proceedings of the 26th International Symposium on Logic-Based Program Synthesis and Transformation (LOPSTR 2016). Springer LNCS 10184, 2016. Google Scholar
  18. M. Hanus and F. Skrlac. A modular and generic analysis server system for functional logic programs. In Proc. of the ACM SIGPLAN 2014 Workshop on Partial Evaluation and Program Manipulation (PEPM'14), pages 181-188. ACM Press, 2014. URL:
  19. M. Hanus (ed.). Curry: An integrated functional logic language (vers. 0.9.0). Available at, 2016.
  20. J. Hughes. Why functional programming matters. In D.A. Turner, editor, Research Topics in Functional Programming, pages 17-42. Addison Wesley, 1990. Google Scholar
  21. P. Koopman, A. Alimarine, J. Tretmans, and R. Plasmeijer. Gast: Generic automated software testing. In Proc. of the 14th International Workshop on Implementation of Functional Languages, pages 84-100. Springer LNCS 2670, 2003. Google Scholar
  22. C.S. Lee, N.D. Jones, and A.M. Ben-Amram. The size-change principle for program termination. In ACM Symposium on Principles of Programming Languages (POPL'01), pages 81-92, 2001. Google Scholar
  23. N. Nishida and G. Vidal. Termination of narrowing via termination of rewriting. Applicable Algebra in Engineering, Communication and Computing, 21(3):177-225, 2010. URL:
  24. T. Nordin and A.P. Tolmach. Modular lazy search for constraint satisfaction problems. Journal of Functional Programming, 11(5):557-587, 2001. URL:
  25. J. Oberschweiber. A package manager for Curry. Master’s thesis, University of Kiel, 2016. Google Scholar
  26. M. Papadakis and K. Sagonas. A PropEr integration of types and function specifications with property-based testing. In Proc. of the 10th ACM SIGPLAN Workshop on Erlang, pages 39-50, 2011. URL:
  27. S. Peyton Jones, editor. Haskell 98 Language and Libraries - The Revised Report. Cambridge University Press, 2003. Google Scholar
  28. U.S. Reddy. Narrowing as the operational semantics of functional languages. In Proc. IEEE Internat. Symposium on Logic Programming, pages 138-151, Boston, 1985. Google Scholar
  29. C. Runciman, M. Naylor, and F. Lindblad. SmallCheck and Lazy SmallCheck: automatic exhaustive testing for small values. In Proc. of the 1st ACM SIGPLAN Symposium on Haskell, pages 37-48. ACM Press, 2008. Google Scholar
  30. H. Zantema and M. Raffelsieper. Proving productivity in infinite data structures. In Proc. 21st International Conference on Rewriting Techniques and Applications (RTA 2010), volume 6 of LIPIcs, pages 401-416. Schloss Dagstuhl - Leibniz-Zentrum fuer Informatik, 2010. URL:
Questions / Remarks / Feedback

Feedback for Dagstuhl Publishing

Thanks for your feedback!

Feedback submitted

Could not send message

Please try again later or send an E-mail