{"id":"https://openalex.org/W2161973496","doi":"https://doi.org/10.1145/1094811.1094814","title":"Generalized algebraic data types and object-oriented programming","display_name":"Generalized algebraic data types and object-oriented programming","publication_year":2005,"publication_date":"2005-10-12","ids":{"openalex":"https://openalex.org/W2161973496","doi":"https://doi.org/10.1145/1094811.1094814","mag":"2161973496"},"language":"en","primary_location":{"id":"doi:10.1145/1094811.1094814","is_oa":false,"landing_page_url":"https://doi.org/10.1145/1094811.1094814","pdf_url":null,"source":null,"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications","raw_type":"proceedings-article"},"type":"article","indexed_in":["crossref"],"open_access":{"is_oa":false,"oa_status":"closed","oa_url":null,"any_repository_has_fulltext":false},"authorships":[{"author_position":"first","author":{"id":"https://openalex.org/A5084971613","display_name":"Andrew Kennedy","orcid":"https://orcid.org/0000-0002-7888-2109"},"institutions":[{"id":"https://openalex.org/I4210164937","display_name":"Microsoft Research (United Kingdom)","ror":"https://ror.org/05k87vq12","country_code":"GB","type":"company","lineage":["https://openalex.org/I1290206253","https://openalex.org/I4210164937"]}],"countries":["GB"],"is_corresponding":true,"raw_author_name":"Andrew Kennedy","raw_affiliation_strings":["Microsoft Research Ltd., Cambridge, United Kingdom"],"affiliations":[{"raw_affiliation_string":"Microsoft Research Ltd., Cambridge, United Kingdom","institution_ids":["https://openalex.org/I4210164937"]}]},{"author_position":"last","author":{"id":"https://openalex.org/A5081301440","display_name":"Claudio Russo","orcid":"https://orcid.org/0000-0003-4877-2424"},"institutions":[{"id":"https://openalex.org/I4210164937","display_name":"Microsoft Research (United Kingdom)","ror":"https://ror.org/05k87vq12","country_code":"GB","type":"company","lineage":["https://openalex.org/I1290206253","https://openalex.org/I4210164937"]}],"countries":["GB"],"is_corresponding":false,"raw_author_name":"Claudio V. Russo","raw_affiliation_strings":["Microsoft Research Ltd., Cambridge, United Kingdom"],"affiliations":[{"raw_affiliation_string":"Microsoft Research Ltd., Cambridge, United Kingdom","institution_ids":["https://openalex.org/I4210164937"]}]}],"institutions":[],"countries_distinct_count":1,"institutions_distinct_count":2,"corresponding_author_ids":["https://openalex.org/A5084971613"],"corresponding_institution_ids":["https://openalex.org/I4210164937"],"apc_list":null,"apc_paid":null,"fwci":7.3071,"has_fulltext":false,"cited_by_count":39,"citation_normalized_percentile":{"value":0.97045301,"is_in_top_1_percent":false,"is_in_top_10_percent":true},"cited_by_percentile_year":{"min":90,"max":98},"biblio":{"volume":null,"issue":null,"first_page":"21","last_page":"40"},"is_retracted":false,"is_paratext":false,"is_xpac":false,"primary_topic":{"id":"https://openalex.org/T10126","display_name":"Logic, programming, and type systems","score":0.9998999834060669,"subfield":{"id":"https://openalex.org/subfields/1702","display_name":"Artificial Intelligence"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},"topics":[{"id":"https://openalex.org/T10126","display_name":"Logic, programming, and type systems","score":0.9998999834060669,"subfield":{"id":"https://openalex.org/subfields/1702","display_name":"Artificial Intelligence"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},{"id":"https://openalex.org/T10142","display_name":"Formal Methods in Verification","score":0.9908000230789185,"subfield":{"id":"https://openalex.org/subfields/1703","display_name":"Computational Theory and Mathematics"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},{"id":"https://openalex.org/T10639","display_name":"Advanced Software Engineering Methodologies","score":0.9904000163078308,"subfield":{"id":"https://openalex.org/subfields/1702","display_name":"Artificial Intelligence"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}}],"keywords":[{"id":"https://openalex.org/keywords/haskell","display_name":"Haskell","score":0.7929799556732178},{"id":"https://openalex.org/keywords/computer-science","display_name":"Computer science","score":0.7889147996902466},{"id":"https://openalex.org/keywords/programming-language","display_name":"Programming language","score":0.7860007286071777},{"id":"https://openalex.org/keywords/data-type","display_name":"Data type","score":0.5627946853637695},{"id":"https://openalex.org/keywords/generic-programming","display_name":"Generic programming","score":0.5621879696846008},{"id":"https://openalex.org/keywords/parameterized-complexity","display_name":"Parameterized complexity","score":0.5013208389282227},{"id":"https://openalex.org/keywords/soundness","display_name":"Soundness","score":0.48790547251701355},{"id":"https://openalex.org/keywords/functional-programming","display_name":"Functional programming","score":0.4876369535923004},{"id":"https://openalex.org/keywords/theoretical-computer-science","display_name":"Theoretical computer science","score":0.4720531105995178},{"id":"https://openalex.org/keywords/type","display_name":"Type (biology)","score":0.4243204593658447},{"id":"https://openalex.org/keywords/algorithm","display_name":"Algorithm","score":0.20078012347221375}],"concepts":[{"id":"https://openalex.org/C2780624054","wikidata":"https://www.wikidata.org/wiki/Q34010","display_name":"Haskell","level":3,"score":0.7929799556732178},{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.7889147996902466},{"id":"https://openalex.org/C199360897","wikidata":"https://www.wikidata.org/wiki/Q9143","display_name":"Programming language","level":1,"score":0.7860007286071777},{"id":"https://openalex.org/C138958017","wikidata":"https://www.wikidata.org/wiki/Q190087","display_name":"Data type","level":2,"score":0.5627946853637695},{"id":"https://openalex.org/C7051814","wikidata":"https://www.wikidata.org/wiki/Q1051282","display_name":"Generic programming","level":2,"score":0.5621879696846008},{"id":"https://openalex.org/C165464430","wikidata":"https://www.wikidata.org/wiki/Q1570441","display_name":"Parameterized complexity","level":2,"score":0.5013208389282227},{"id":"https://openalex.org/C39920170","wikidata":"https://www.wikidata.org/wiki/Q693083","display_name":"Soundness","level":2,"score":0.48790547251701355},{"id":"https://openalex.org/C42383842","wikidata":"https://www.wikidata.org/wiki/Q193076","display_name":"Functional programming","level":2,"score":0.4876369535923004},{"id":"https://openalex.org/C80444323","wikidata":"https://www.wikidata.org/wiki/Q2878974","display_name":"Theoretical computer science","level":1,"score":0.4720531105995178},{"id":"https://openalex.org/C2777299769","wikidata":"https://www.wikidata.org/wiki/Q3707858","display_name":"Type (biology)","level":2,"score":0.4243204593658447},{"id":"https://openalex.org/C11413529","wikidata":"https://www.wikidata.org/wiki/Q8366","display_name":"Algorithm","level":1,"score":0.20078012347221375},{"id":"https://openalex.org/C18903297","wikidata":"https://www.wikidata.org/wiki/Q7150","display_name":"Ecology","level":1,"score":0.0},{"id":"https://openalex.org/C86803240","wikidata":"https://www.wikidata.org/wiki/Q420","display_name":"Biology","level":0,"score":0.0}],"mesh":[],"locations_count":3,"locations":[{"id":"doi:10.1145/1094811.1094814","is_oa":false,"landing_page_url":"https://doi.org/10.1145/1094811.1094814","pdf_url":null,"source":null,"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications","raw_type":"proceedings-article"},{"id":"pmh:oai:CiteSeerX.psu:10.1.1.83.6047","is_oa":false,"landing_page_url":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.83.6047","pdf_url":null,"source":null,"license":null,"license_id":null,"version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"http://research.microsoft.com/~akenn/generics/gadtoop.pdf","raw_type":"text"},{"id":"pmh:oai:CiteSeerX.psu:10.1.1.92.2890","is_oa":false,"landing_page_url":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.92.2890","pdf_url":null,"source":null,"license":null,"license_id":null,"version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"http://research.microsoft.com/users/Cambridge/crusso/papers/gadt.pdf","raw_type":"text"}],"best_oa_location":null,"sustainable_development_goals":[],"awards":[],"funders":[],"has_content":{"grobid_xml":false,"pdf":false},"content_urls":null,"referenced_works_count":24,"referenced_works":["https://openalex.org/W1525643703","https://openalex.org/W1550049051","https://openalex.org/W1570911130","https://openalex.org/W1583295953","https://openalex.org/W1649645444","https://openalex.org/W1827112781","https://openalex.org/W1897069414","https://openalex.org/W1949275316","https://openalex.org/W1965664509","https://openalex.org/W1974398164","https://openalex.org/W1984514567","https://openalex.org/W2029360780","https://openalex.org/W2033348393","https://openalex.org/W2056292566","https://openalex.org/W2103525263","https://openalex.org/W2133546079","https://openalex.org/W2138964563","https://openalex.org/W2160930653","https://openalex.org/W2168986107","https://openalex.org/W2181449792","https://openalex.org/W2337269565","https://openalex.org/W2805366091","https://openalex.org/W4386688170","https://openalex.org/W6703530464"],"related_works":["https://openalex.org/W1564538666","https://openalex.org/W2526970984","https://openalex.org/W1688372159","https://openalex.org/W1528956417","https://openalex.org/W2493130382","https://openalex.org/W2145738007","https://openalex.org/W2112263414","https://openalex.org/W2971609332","https://openalex.org/W2110095505","https://openalex.org/W2779713464"],"abstract_inverted_index":{"Generalized":[0],"algebraic":[1,20],"data":[2],"types":[3],"(GADTs)":[4],"have":[5,43],"received":[6],"much":[7],"attention":[8],"recently":[9],"in":[10,145,151],"the":[11,17,86,102,129,141],"functional":[12],"programming":[13,66],"community.":[14],"They":[15],"generalize":[16],"(type)":[18],"parameterized":[19],"datatypes":[21],"(PADTs)":[22],"of":[23,38,46,82,88,104,128,133],"ML":[24],"and":[25,55,57,71,78,91,136,148,161,179],"Haskell":[26],"by":[27],"permitting":[28],"value":[29],"constructors":[30],"to":[31,138,170],"return":[32],"specific,":[33],"rather":[34],"than":[35],"parametric,":[36],"typeinstantiations":[37],"their":[39],"own":[40],"datatype.":[41],"GADTs":[42],"a":[44,79,126,156,163],"number":[45],"applications,":[47],"including":[48],"strongly-typed":[49],"evaluators,":[50],"generic":[51,53],"pretty-printing,":[52],"traversals":[54],"queries,":[56],"typed":[58],"LR":[59],"parsing.":[60],"We":[61,124,175],"show":[62],"that":[63],"existing":[64],"object-oriented":[65],"languages":[67],"such":[68],"as":[69,167],"Java":[70,137],"C":[72,134],"\u266f":[73,135],"can":[74,97],"express":[75],"GADT":[76,146],"definitions,":[77],"large":[80],"class":[81],"GADT-manipulating":[83],"programs,":[84],"through":[85,101],"use":[87,103],"generics,":[89],"subclassing,":[90],"virtual":[92,171],"dispatch.":[93],"However,":[94],"some":[95],"programs":[96,147],"be":[98],"written":[99],"only":[100,116],"redundant":[105],"runtime":[106],"casts.":[107],"Moreover,":[108],"instantiationspecific,":[109],"yet":[110],"safe,":[111],"operations":[112],"on":[113,173],"ordinary":[114],"PADTs":[115],"admit":[117],"indirect":[118],"cast-free":[119],"implementations,":[120],"via":[121],"higher-order":[122,149],"encodings.":[123],"propose":[125],"generalization":[127],"type":[130,181],"constraint":[131],"mechanisms":[132],"both":[139,177],"avoid":[140],"need":[142],"for":[143,159],"casts":[144],"contortions":[150],"PADT":[152],"programs;":[153],"we":[154],"present":[155],"Visitor":[157],"pattern":[158],"GADTs,":[160],"describe":[162],"refined":[164],"switch":[165],"construct":[166],"an":[168],"alternative":[169],"dispatch":[172],"datatypes.":[174],"formalize":[176],"extensions":[178],"prove":[180],"soundness.":[182]},"counts_by_year":[{"year":2022,"cited_by_count":1},{"year":2019,"cited_by_count":3},{"year":2018,"cited_by_count":2},{"year":2017,"cited_by_count":1},{"year":2013,"cited_by_count":4},{"year":2012,"cited_by_count":3}],"updated_date":"2026-04-04T16:13:02.066488","created_date":"2025-10-10T00:00:00"}
