{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T06:14:27Z","timestamp":1784182467947,"version":"3.55.0"},"reference-count":0,"publisher":"Cambridge University Press (CUP)","issue":"2","license":[{"start":{"date-parts":[[2002,3,22]],"date-time":"2002-03-22T00:00:00Z","timestamp":1016755200000},"content-version":"unspecified","delay-in-days":21,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2002,3]]},"abstract":"<jats:p>\n                    We present\n                    <jats:italic>CMS<\/jats:italic>\n                    , a simple and powerful calculus of modules supporting mutual recursion \nand higher order features, which can be instantiated over an arbitrary core calculus satisfying \nstandard assumptions. The calculus allows expression of a large variety of existing mechanisms \nfor combining software components, including parameterized modules similar to ML \nfunctors, extension with overriding as in object-oriented programming, mixin modules and \nextra-linguistic mechanisms like those provided by a linker. Hence\n                    <jats:italic>CMS<\/jats:italic>\n                    can be used as a \nparadigmatic calculus for modular languages, in the same spirit the lambda calculus is used \nfor functional programming. We first present an untyped version of the calculus and then a \ntype system; we prove confluence, progress, and subject reduction properties. Then, we define \na derived calculus of mixin modules directly in terms of\n                    <jats:italic>CMS<\/jats:italic>\n                    and show how to encode other \nprimitive calculi into\n                    <jats:italic>CMS<\/jats:italic>\n                    (the lambda calculus and the Abadi-Cardelli object calculus). \nFinally, we consider the problem of introducing a subtype relation for module types.\n                  <\/jats:p>","DOI":"10.1017\/s0956796801004257","type":"journal-article","created":{"date-parts":[[2008,8,8]],"date-time":"2008-08-08T10:02:50Z","timestamp":1218189770000},"page":"91-132","source":"Crossref","is-referenced-by-count":56,"title":["A calculus of module systems"],"prefix":"10.1017","volume":"12","author":[{"given":"DAVIDE","family":"ANCONA","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"ELENA","family":"ZUCCA","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2002,3,22]]},"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796801004257","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:35:39Z","timestamp":1779834939000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796801004257\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2002,3]]},"references-count":0,"journal-issue":{"issue":"2","published-print":{"date-parts":[[2002,1]]}},"alternative-id":["S0956796801004257"],"URL":"https:\/\/doi.org\/10.1017\/s0956796801004257","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2002,3]]}}}