{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,9]],"date-time":"2026-01-09T03:33:47Z","timestamp":1767929627181,"version":"3.49.0"},"reference-count":51,"publisher":"Association for Computing Machinery (ACM)","issue":"ICFP","license":[{"start":{"date-parts":[[2023,8,30]],"date-time":"2023-08-30T00:00:00Z","timestamp":1693353600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"funder":[{"name":"NSF","award":["CCF-2044815"],"award-info":[{"award-number":["CCF-2044815"]}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2023,8,30]]},"abstract":"<jats:p>We present a novel approach to generic programming over extensible data types. Row types capture the  \nstructure of records and variants, and can be used to express record and variant subtyping, record extension, and modular composition of case branches. We extend row typing to capture generic programming over rows themselves, capturing patterns including lifting operations to records and variations from their component types, and the duality between cases blocks over variants and records of labeled functions, without placing specific requirements on the fields or constructors present in the records and variants. We formalize our approach in System R\ud835\udf14, an extension of F\ud835\udf14 with row types, and give a denotational semantics for (stratified) R\ud835\udf14 in Agda.<\/jats:p>","DOI":"10.1145\/3607843","type":"journal-article","created":{"date-parts":[[2023,8,31]],"date-time":"2023-08-31T17:40:31Z","timestamp":1693503631000},"page":"356-384","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":4,"title":["Generic Programming with Extensible Data Types: Or, Making Ad Hoc Extensible Data Types Less Ad Hoc"],"prefix":"10.1145","volume":"7","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-6237-3326","authenticated-orcid":false,"given":"Alex","family":"Hubers","sequence":"first","affiliation":[{"name":"University of Iowa, USA"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-3992-1080","authenticated-orcid":false,"given":"J. Garrett","family":"Morris","sequence":"additional","affiliation":[{"name":"University of Iowa, USA"}]}],"member":"320","published-online":{"date-parts":[[2023,8,31]]},"reference":[{"key":"e_1_2_1_1_1","doi-asserted-by":"publisher","DOI":"10.1145\/2633628.2633635"},{"key":"e_1_2_1_2_1","volume-title":"Workshop on types for program analysis. Aarhus.","author":"Berthomieu Bernard","year":"1995","unstructured":"Bernard Berthomieu and Camille le Moni\u00e8s de Sagazan. 1995. A Calculus of Tagged Types, with applications to process languages. In Workshop on types for program analysis. Aarhus."},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/1159803.1159836"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/1806596.1806612"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/2784731.2784741"},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/2676726.2677004"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/2364527.2364534"},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/2500365.2500582"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.4204\/EPTCS.176.4"},{"key":"e_1_2_1_10_1","volume-title":"Programming with Polymorphic Variants. In ML Workshop. ACM.","author":"Garrigue Jacques","year":"1998","unstructured":"Jacques Garrigue. 1998. Programming with Polymorphic Variants. In ML Workshop. ACM."},{"key":"e_1_2_1_11_1","volume-title":"Jones","author":"Gaster Benedict R.","year":"1996","unstructured":"Benedict R. Gaster and Mark P. Jones. 1996. A Polymorphic Type System for Extensible Records and Variants. University of Nottingham."},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/99583.99603"},{"key":"e_1_2_1_13_1","doi-asserted-by":"crossref","unstructured":"Daniel Hillerstr\u00f6m and Sam Lindley. 2016. Liberating effects with rows and handlers. In TyDe@ICFP. ACM 15\u201327.","DOI":"10.1145\/2976022.2976033"},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.5281\/zenodo.8116889"},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/3546189.3549923"},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1017\/CBO9780511663086"},{"key":"e_1_2_1_17_1","volume-title":"Proceedings of the first ACM SIGPLAN symposium on Haskell (Haskell \u201908)","author":"Mark","unstructured":"Mark P. Jones and Iavor S. Diatchki. 2008. Language and program design for functional dependencies. In Proceedings of the first ACM SIGPLAN symposium on Haskell (Haskell \u201908). ACM, Victoria, BC, Canada. 87\u201398."},{"key":"e_1_2_1_18_1","volume-title":"Proc. ACM Program. Lang., 4, POPL","author":"Jones Mark P.","year":"2020","unstructured":"Mark P. Jones, J. Garrett Morris, and Richard A. Eisenberg. 2020. Partial type constructors: or, making ad hoc datatypes less ad hoc. Proc. ACM Program. Lang., 4, POPL (2020), 40:1\u201340:28."},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-030-33636-3_12"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/2500365.2500618"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/1017472.1017488"},{"key":"e_1_2_1_22_1","unstructured":"Daan Leijen. 2004. First-class labels for extensible rows (technical report uu-cs-2004-51 ed.). Dept. of Computer Science Universiteit Utrecht. https:\/\/www.microsoft.com\/en-us\/research\/publication\/first-class-labels-for-extensible-rows\/"},{"key":"e_1_2_1_23_1","volume-title":"TFP 2005","author":"Leijen Daan","year":"2005","unstructured":"Daan Leijen. 2005. Extensible records with scoped labels. In Revised Selected Papers from the Sixth Symposium on Trends in Functional Programming, TFP 2005, Tallinn, Estonia, 23-24 September 2005.. 179\u2013194."},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.4204\/EPTCS.153.8"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/3009837.3009872"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1016\/0890-5401(91)90053-5"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/2103786.2103798"},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/3009837.3009897"},{"key":"e_1_2_1_29_1","volume-title":"Behavioural Types: from Theory to Tools, Simon Gay and Ant\u00f3nio Ravara (Eds.)","author":"Lindley Sam","unstructured":"Sam Lindley and J. Garrett Morris. 2017. Lightweight functional session types. In Behavioural Types: from Theory to Tools, Simon Gay and Ant\u00f3nio Ravara (Eds.). River Publishers."},{"key":"e_1_2_1_30_1","volume-title":"Proceedings of the 10th ACM SIGPLAN International Conference on Functional Programming, ICFP 2005, Tallinn, Estonia","author":"Makholm Henning","year":"2005","unstructured":"Henning Makholm and J. B. Wells. 2005. Type inference, principal typings, and let-polymorphism for first-class mixin modules. In Proceedings of the 10th ACM SIGPLAN International Conference on Functional Programming, ICFP 2005, Tallinn, Estonia, September 26-28, 2005, Olivier Danvy and Benjamin C. Pierce (Eds.). ACM, 156\u2013167."},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/1863495.1863497"},{"key":"e_1_2_1_32_1","doi-asserted-by":"crossref","unstructured":"Robin Milner. 1978. A theory of type polymorphism in programming. J. Comput. System Sci. 348\u2013375.","DOI":"10.1016\/0022-0000(78)90014-4"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/2804302.2804320"},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/2951913.2951925"},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/3290325"},{"key":"e_1_2_1_36_1","doi-asserted-by":"crossref","unstructured":"Bruno Oliveira Shin-Cheng Mu and Shu-Hung You. 2015. Modular reifiable matching: a list-of-functors approach to two-level types. In Haskell. ACM 82\u201393.","DOI":"10.1145\/2887747.2804315"},{"key":"e_1_2_1_37_1","doi-asserted-by":"publisher","DOI":"10.1145\/1159803.1159811"},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.1023\/A:1023064908962"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-00590-9_7"},{"key":"e_1_2_1_40_1","volume-title":"Advanced Topics in Types and Programming Languages, Benjamin C","author":"Pottier Fran\u00e7ois","unstructured":"Fran\u00e7ois Pottier and Didier R\u00e9my. 2005. The essence of ML type inference. In Advanced Topics in Types and Programming Languages, Benjamin C. Pierce (Ed.). The MIT Press."},{"key":"e_1_2_1_41_1","volume-title":"Conference Record of the Sixteenth Annual ACM Symposium on Principles of Programming Languages","author":"R\u00e9my Didier","year":"1989","unstructured":"Didier R\u00e9my. 1989. Typechecking Records and Variants in a Natural Extension of ML. In Conference Record of the Sixteenth Annual ACM Symposium on Principles of Programming Languages, Austin, Texas, USA, January 11-13, 1989. ACM Press, 77\u201388."},{"key":"e_1_2_1_42_1","volume-title":"POPL \u201992. ACM","author":"R\u00e9my Didier","unstructured":"Didier R\u00e9my. 1992. Typing Record Concatenation for Free. In POPL \u201992. ACM, Albuquerque, New Mexico. 166\u2013176."},{"key":"e_1_2_1_43_1","doi-asserted-by":"publisher","DOI":"10.1145\/3571211"},{"key":"e_1_2_1_44_1","doi-asserted-by":"publisher","DOI":"10.1145\/1016850.1016878"},{"key":"e_1_2_1_45_1","volume-title":"Designing Record Systems","author":"Sulzmann Martin","unstructured":"Martin Sulzmann. 1997. Designing Record Systems. Yale University."},{"key":"e_1_2_1_46_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796808006758"},{"key":"e_1_2_1_47_1","unstructured":"Philip Wadler. 1998. The Expression Problem. http:\/\/homepages.inf.ed.ac.uk\/wadler\/papers\/expression\/expression.txt"},{"key":"e_1_2_1_48_1","doi-asserted-by":"publisher","DOI":"10.1145\/75277.75283"},{"key":"e_1_2_1_49_1","volume-title":"Proceedings of the Symposium on Logic in Computer Science (LICS \u201987)","author":"Wand Mitchell","year":"1987","unstructured":"Mitchell Wand. 1987. Complete Type Inference for Simple Objects. In Proceedings of the Symposium on Logic in Computer Science (LICS \u201987), Ithaca, New York, USA, June 22-25, 1987. IEEE Computer Society, 37\u201344."},{"key":"e_1_2_1_50_1","doi-asserted-by":"publisher","DOI":"10.5555\/77350.77360"},{"key":"e_1_2_1_51_1","doi-asserted-by":"publisher","DOI":"10.1016\/0890-5401(91)90050-C"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3607843","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3607843","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T16:37:06Z","timestamp":1750178226000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3607843"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2023,8,30]]},"references-count":51,"journal-issue":{"issue":"ICFP","published-print":{"date-parts":[[2023,8,30]]}},"alternative-id":["10.1145\/3607843"],"URL":"https:\/\/doi.org\/10.1145\/3607843","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2023,8,30]]},"assertion":[{"value":"2023-08-31","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}