{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:55:58Z","timestamp":1776891358308,"version":"3.51.2"},"reference-count":26,"publisher":"Centre pour la Communication Scientifique Directe (CCSD)","issue":"3","license":[{"start":{"date-parts":[[2008,5,1]],"date-time":"2008-05-01T00:00:00Z","timestamp":1209600000000},"content-version":"unspecified","delay-in-days":0,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2008,5]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>\n                    Family polymorphism has been proposed for object-oriented languages as a solution to supporting reusable yet type-safe mutually recursive classes. A key idea of family polymorphism is the notion of families, which are used to group mutually recursive classes. In the original proposal, due to the design decision that families are represented by objects, dependent types had to be introduced, resulting in a rather complex type system. In this article, we propose a simpler solution of\n                    <jats:italic>lightweight<\/jats:italic>\n                    family polymorphism, based on the idea that families are represented by classes rather than by objects. This change makes the type system significantly simpler without losing much expressive power of the language. Moreover, \u201cfamily-polymorphic\u201d methods now take a form of parametric methods; thus, it is easy to apply method type argument inference as in Java 5.0. To rigorously show that our approach is safe, we formalize the set of language features on top of Featherweight Java and prove that the type system is sound. An algorithm for type inference for family-polymorphic method invocations is also formalized and proved to be correct. Finally, a formal translation by erasure to Featherweight Java is presented; it is proved to preserve typing and execution results, showing that our new language features can be implemented in Java by simply extending the compiler.\n                  <\/jats:p>","DOI":"10.1017\/s0956796807006405","type":"journal-article","created":{"date-parts":[[2007,7,6]],"date-time":"2007-07-06T05:06:36Z","timestamp":1183698396000},"page":"285-331","source":"Crossref","is-referenced-by-count":21,"title":["Lightweight family polymorphism"],"prefix":"10.46298","volume":"18","author":[{"given":"CHIERI","family":"SAITO","sequence":"first","affiliation":[]},{"given":"ATSUSHI","family":"IGARASHI","sequence":"additional","affiliation":[]},{"given":"MIRKO","family":"VIROLI","sequence":"additional","affiliation":[]}],"member":"25203","published-online":{"date-parts":[[2008,5,1]]},"reference":[{"key":"S0956796807006405_ref22","unstructured":"Odersky M. (2002, January) Inferred type instantiation for GJ. Available at: http:\/\/lampwww.epfl.ch\/odersky\/papers\/localti02.html."},{"key":"S0956796807006405_ref20","doi-asserted-by":"crossref","unstructured":"Madsen O. L. & M\u03c6ller-Pedersen B. (1989, October). Virtual classes: A powerful mechanism in object-oriented programming. In Proceedings of ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'89), pp. 397\u2013406.","DOI":"10.1145\/74877.74919"},{"key":"S0956796807006405_ref19","unstructured":"Jolly P. , Drossopoulou S. , Anderson C. & Ostermann K. (2004, June). Simple dependent types: Concord. In Proceedings of 6th ECOOP Workshop on Formal Techniques for Java-like Programs (FTfJP2004)."},{"key":"S0956796807006405_ref17","doi-asserted-by":"publisher","DOI":"10.1145\/503502.503505"},{"key":"S0956796807006405_ref13","first-page":"303","volume-title":"Proceedings of European Conference on Object-Oriented Programming (ECOOP2003)","author":"Ernst","year":"2003"},{"key":"S0956796807006405_ref14","doi-asserted-by":"crossref","unstructured":"Ernst E. , Ostermann K. & Cook W. R. (2006, January). A virtual class calculus. In Proceedings of ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL2006), pp. 270\u2013282.","DOI":"10.1145\/1111037.1111062"},{"key":"S0956796807006405_ref1","first-page":"45","volume-title":"Advanced Topics in Types and Programming Languages","author":"Aspinall","year":"2005"},{"key":"S0956796807006405_ref25","doi-asserted-by":"crossref","unstructured":"Torgersen M. (2004, June) The expression problem revisited: Four new solutions using generics. Proceedings of European Conference on Object-Oriented Programming (ECOOP2004). Lecture Notes on Computer Science, vol. 3086, pp. 123\u2013146.","DOI":"10.1007\/978-3-540-24851-4_6"},{"key":"S0956796807006405_ref16","doi-asserted-by":"crossref","unstructured":"Igarashi A. & Viroli M. (2007, January). Variant path types for scalable extensibility. In Proceedings of the International Workshop on Foundations and Developments of Object-Oriented Languages (FOOL\/WOOD 2007). Available at: http:\/\/foolwood07.cs.uchicago.edu\/.","DOI":"10.1145\/1297027.1297037"},{"key":"S0956796807006405_ref15","doi-asserted-by":"crossref","unstructured":"Flatt M. , Krishnamurthi S. & Felleisen M. (1998, January). Classes and mixins. In Proceedings of ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL'98), pp. 171\u2013183.","DOI":"10.1145\/268946.268961"},{"key":"S0956796807006405_ref4","volume-title":"Proceedings of European Conference on Object-Oriented Programming (ECOOP2004)","author":"Bruce","year":"2004"},{"key":"S0956796807006405_ref12","first-page":"303","volume-title":"Proceedings of European Conference on Object-Oriented Programming (ECOOP2001)","author":"Ernst","year":"2001"},{"key":"S0956796807006405_ref11","doi-asserted-by":"crossref","unstructured":"Ernst E. (1999 June) gbeta\u2014A Language with Virtual Attributes, Block Structure, and Propagating, Dynamic Inheritance. Ph.D. thesis, Department of Computer Science, University of Aarhus, Aarhus, Denmark.","DOI":"10.7146\/dpb.v29i549.7654"},{"key":"S0956796807006405_ref10","doi-asserted-by":"crossref","unstructured":"Clarke D. , Drossopoulou S. , Noble J. & Wrigstad T. (2007, March). Tribe: A simple virtual class calculus. In Proceedings of International Conference on Aspect-Oriented Software Design (AOSD'07), pp. 121\u2013134.","DOI":"10.1145\/1218563.1218578"},{"key":"S0956796807006405_ref5","volume-title":"Proceedings of 15th Conference on the Mathematical Foundations of Programming Semantics (MFPS XV)","author":"Bruce","year":"1999"},{"key":"S0956796807006405_ref18","first-page":"101","volume-title":"Proceedings of the 3rd Asian Symposium on Programming Languages and Systems (APLAS2005)","author":"Igarashi","year":"2005"},{"key":"S0956796807006405_ref26","doi-asserted-by":"publisher","DOI":"10.1006\/inco.1994.1093"},{"key":"S0956796807006405_ref8","volume-title":"Proceedings of 12th European Conference on Object-Oriented Programming (ECOOP'98)","author":"Bruce","year":"1998"},{"key":"S0956796807006405_ref6","doi-asserted-by":"crossref","first-page":"221","DOI":"10.1002\/j.1096-9942.1995.tb00019.x","article-title":"On binary method","volume":"1","author":"Bruce","year":"1996","journal-title":"Theory Pract. Object Systems"},{"key":"S0956796807006405_ref7","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0053376"},{"key":"S0956796807006405_ref24","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-48743-3_9"},{"key":"S0956796807006405_ref9","first-page":"273","volume-title":"Proceedings of ACM Conference on Functional Programming and Computer Architecture (FPCA'89)","author":"Canning","year":"1989"},{"key":"S0956796807006405_ref23","first-page":"201","volume-title":"Proceedings of European Conference on Object-Oriented Programming (ECOOP'03)","author":"Odersky","year":"2003"},{"key":"S0956796807006405_ref3","doi-asserted-by":"crossref","unstructured":"Bruce K. B. (2003) Some challenging typing issues in object-oriented languages. In Proceedings of Workshop on Object-Oriented Development (WOOD'03). Electronic Notes in Theoretical Computer Science, vol. 82, no. 8.","DOI":"10.1016\/S1571-0661(04)80799-0"},{"key":"S0956796807006405_ref21","doi-asserted-by":"crossref","unstructured":"Nystrom N. , Chong S. & Myers A. C. (2004, October) Scalable extensibility via nested inheritance. In Proceedings of ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'04).","DOI":"10.1145\/1028976.1028986"},{"key":"S0956796807006405_ref2","doi-asserted-by":"crossref","unstructured":"Bracha G. , Odersky M. , Stoutamire D. & Wadler P. (1998, October). Making the future safe for the past: Adding genericity to the Java programming language. In Proceedings of ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'98), pp. 103\u2013200.","DOI":"10.1145\/286936.286957"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796807006405","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:19:09Z","timestamp":1776889149000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796807006405\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2008,5]]},"references-count":26,"journal-issue":{"issue":"3","published-print":{"date-parts":[[2008,5]]}},"alternative-id":["S0956796807006405"],"URL":"https:\/\/doi.org\/10.1017\/s0956796807006405","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2008,5]]}}}