{"id":"https://openalex.org/W2124274632","doi":"https://doi.org/10.1017/s0956796808006898","title":"A pattern for almost compositional functions","display_name":"A pattern for almost compositional functions","publication_year":2008,"publication_date":"2008-09-01","ids":{"openalex":"https://openalex.org/W2124274632","doi":"https://doi.org/10.1017/s0956796808006898","mag":"2124274632"},"language":"en","primary_location":{"id":"doi:10.1017/s0956796808006898","is_oa":true,"landing_page_url":"https://doi.org/10.1017/s0956796808006898","pdf_url":"https://www.cambridge.org/core/services/aop-cambridge-core/content/view/682674057A68EFA9D46A8201B18C80E6/S0956796808006898a.pdf/div-class-title-a-pattern-for-almost-compositional-functions-div.pdf","source":{"id":"https://openalex.org/S12266929","display_name":"Journal of Functional Programming","issn_l":"0956-7968","issn":["0956-7968","1469-7653"],"is_oa":false,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4310311721","host_organization_name":"Cambridge University Press","host_organization_lineage":["https://openalex.org/P4310311721","https://openalex.org/P4310311702"],"host_organization_lineage_names":["Cambridge University Press","University of Cambridge"],"type":"journal"},"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Journal of Functional Programming","raw_type":"journal-article"},"type":"article","indexed_in":["crossref"],"open_access":{"is_oa":true,"oa_status":"bronze","oa_url":"https://www.cambridge.org/core/services/aop-cambridge-core/content/view/682674057A68EFA9D46A8201B18C80E6/S0956796808006898a.pdf/div-class-title-a-pattern-for-almost-compositional-functions-div.pdf","any_repository_has_fulltext":false},"authorships":[{"author_position":"first","author":{"id":"https://openalex.org/A5025594111","display_name":"Bj\u00f6rn Bringert","orcid":null},"institutions":[{"id":"https://openalex.org/I66862912","display_name":"Chalmers University of Technology","ror":"https://ror.org/040wg7k59","country_code":"SE","type":"education","lineage":["https://openalex.org/I66862912"]}],"countries":["SE"],"is_corresponding":true,"raw_author_name":"BJ\u00d6RN BRINGERT","raw_affiliation_strings":["Department of Computer Science and Engineering, Chalmers University of Technology and University of GothenburgSE-412 96, G\u00f6teborg, Sweden (e-mail:","Department of computer science and engineering, chalmers university of technology and university of gothenburgse-412 96, g\u00f6teborg, sweden (e-mail: bringert@chalmers.se, aarne@chalmers.se)#TAB#"],"raw_orcid":null,"affiliations":[{"raw_affiliation_string":"Department of Computer Science and Engineering, Chalmers University of Technology and University of GothenburgSE-412 96, G\u00f6teborg, Sweden (e-mail:","institution_ids":["https://openalex.org/I66862912"]},{"raw_affiliation_string":"Department of computer science and engineering, chalmers university of technology and university of gothenburgse-412 96, g\u00f6teborg, sweden (e-mail: bringert@chalmers.se, aarne@chalmers.se)#TAB#","institution_ids":["https://openalex.org/I66862912"]}]},{"author_position":"last","author":{"id":"https://openalex.org/A5054491296","display_name":"Aarne Ranta","orcid":"https://orcid.org/0000-0002-5060-1598"},"institutions":[{"id":"https://openalex.org/I66862912","display_name":"Chalmers University of Technology","ror":"https://ror.org/040wg7k59","country_code":"SE","type":"education","lineage":["https://openalex.org/I66862912"]}],"countries":["SE"],"is_corresponding":false,"raw_author_name":"AARNE RANTA","raw_affiliation_strings":["Department of Computer Science and Engineering, Chalmers University of Technology and University of GothenburgSE-412 96, G\u00f6teborg, Sweden (e-mail:","Department of computer science and engineering, chalmers university of technology and university of gothenburgse-412 96, g\u00f6teborg, sweden (e-mail: bringert@chalmers.se, aarne@chalmers.se)#TAB#"],"raw_orcid":null,"affiliations":[{"raw_affiliation_string":"Department of Computer Science and Engineering, Chalmers University of Technology and University of GothenburgSE-412 96, G\u00f6teborg, Sweden (e-mail:","institution_ids":["https://openalex.org/I66862912"]},{"raw_affiliation_string":"Department of computer science and engineering, chalmers university of technology and university of gothenburgse-412 96, g\u00f6teborg, sweden (e-mail: bringert@chalmers.se, aarne@chalmers.se)#TAB#","institution_ids":["https://openalex.org/I66862912"]}]}],"institutions":[],"countries_distinct_count":1,"institutions_distinct_count":2,"corresponding_author_ids":["https://openalex.org/A5025594111"],"corresponding_institution_ids":["https://openalex.org/I66862912"],"apc_list":null,"apc_paid":null,"fwci":2.9323,"has_fulltext":true,"cited_by_count":12,"citation_normalized_percentile":{"value":0.91745898,"is_in_top_1_percent":false,"is_in_top_10_percent":true},"cited_by_percentile_year":{"min":89,"max":96},"biblio":{"volume":"18","issue":"5-6","first_page":"567","last_page":"598"},"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.9998000264167786,"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.9998000264167786,"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/T10639","display_name":"Advanced Software Engineering Methodologies","score":0.9923999905586243,"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/T11010","display_name":"Logic, Reasoning, and Knowledge","score":0.9865000247955322,"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/computer-science","display_name":"Computer science","score":0.835995078086853},{"id":"https://openalex.org/keywords/haskell","display_name":"Haskell","score":0.7968857288360596},{"id":"https://openalex.org/keywords/generic-programming","display_name":"Generic programming","score":0.6944659948348999},{"id":"https://openalex.org/keywords/data-type","display_name":"Data type","score":0.6210849285125732},{"id":"https://openalex.org/keywords/programming-language","display_name":"Programming language","score":0.5442242622375488},{"id":"https://openalex.org/keywords/pattern-matching","display_name":"Pattern matching","score":0.5059565901756287},{"id":"https://openalex.org/keywords/theoretical-computer-science","display_name":"Theoretical computer science","score":0.4928314983844757},{"id":"https://openalex.org/keywords/type","display_name":"Type (biology)","score":0.4832087755203247},{"id":"https://openalex.org/keywords/type-theory","display_name":"Type theory","score":0.4650462865829468},{"id":"https://openalex.org/keywords/abstract-data-type","display_name":"Abstract data type","score":0.4650171101093292},{"id":"https://openalex.org/keywords/data-structure","display_name":"Data structure","score":0.4435879588127136},{"id":"https://openalex.org/keywords/functional-programming","display_name":"Functional programming","score":0.4127647876739502}],"concepts":[{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.835995078086853},{"id":"https://openalex.org/C2780624054","wikidata":"https://www.wikidata.org/wiki/Q34010","display_name":"Haskell","level":3,"score":0.7968857288360596},{"id":"https://openalex.org/C7051814","wikidata":"https://www.wikidata.org/wiki/Q1051282","display_name":"Generic programming","level":2,"score":0.6944659948348999},{"id":"https://openalex.org/C138958017","wikidata":"https://www.wikidata.org/wiki/Q190087","display_name":"Data type","level":2,"score":0.6210849285125732},{"id":"https://openalex.org/C199360897","wikidata":"https://www.wikidata.org/wiki/Q9143","display_name":"Programming language","level":1,"score":0.5442242622375488},{"id":"https://openalex.org/C68859911","wikidata":"https://www.wikidata.org/wiki/Q1503724","display_name":"Pattern matching","level":2,"score":0.5059565901756287},{"id":"https://openalex.org/C80444323","wikidata":"https://www.wikidata.org/wiki/Q2878974","display_name":"Theoretical computer science","level":1,"score":0.4928314983844757},{"id":"https://openalex.org/C2777299769","wikidata":"https://www.wikidata.org/wiki/Q3707858","display_name":"Type (biology)","level":2,"score":0.4832087755203247},{"id":"https://openalex.org/C93682546","wikidata":"https://www.wikidata.org/wiki/Q1056428","display_name":"Type theory","level":3,"score":0.4650462865829468},{"id":"https://openalex.org/C175971053","wikidata":"https://www.wikidata.org/wiki/Q827335","display_name":"Abstract data type","level":2,"score":0.4650171101093292},{"id":"https://openalex.org/C162319229","wikidata":"https://www.wikidata.org/wiki/Q175263","display_name":"Data structure","level":2,"score":0.4435879588127136},{"id":"https://openalex.org/C42383842","wikidata":"https://www.wikidata.org/wiki/Q193076","display_name":"Functional programming","level":2,"score":0.4127647876739502},{"id":"https://openalex.org/C86803240","wikidata":"https://www.wikidata.org/wiki/Q420","display_name":"Biology","level":0,"score":0.0},{"id":"https://openalex.org/C18903297","wikidata":"https://www.wikidata.org/wiki/Q7150","display_name":"Ecology","level":1,"score":0.0}],"mesh":[],"locations_count":1,"locations":[{"id":"doi:10.1017/s0956796808006898","is_oa":true,"landing_page_url":"https://doi.org/10.1017/s0956796808006898","pdf_url":"https://www.cambridge.org/core/services/aop-cambridge-core/content/view/682674057A68EFA9D46A8201B18C80E6/S0956796808006898a.pdf/div-class-title-a-pattern-for-almost-compositional-functions-div.pdf","source":{"id":"https://openalex.org/S12266929","display_name":"Journal of Functional Programming","issn_l":"0956-7968","issn":["0956-7968","1469-7653"],"is_oa":false,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4310311721","host_organization_name":"Cambridge University Press","host_organization_lineage":["https://openalex.org/P4310311721","https://openalex.org/P4310311702"],"host_organization_lineage_names":["Cambridge University Press","University of Cambridge"],"type":"journal"},"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Journal of Functional Programming","raw_type":"journal-article"}],"best_oa_location":{"id":"doi:10.1017/s0956796808006898","is_oa":true,"landing_page_url":"https://doi.org/10.1017/s0956796808006898","pdf_url":"https://www.cambridge.org/core/services/aop-cambridge-core/content/view/682674057A68EFA9D46A8201B18C80E6/S0956796808006898a.pdf/div-class-title-a-pattern-for-almost-compositional-functions-div.pdf","source":{"id":"https://openalex.org/S12266929","display_name":"Journal of Functional Programming","issn_l":"0956-7968","issn":["0956-7968","1469-7653"],"is_oa":false,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4310311721","host_organization_name":"Cambridge University Press","host_organization_lineage":["https://openalex.org/P4310311721","https://openalex.org/P4310311702"],"host_organization_lineage_names":["Cambridge University Press","University of Cambridge"],"type":"journal"},"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Journal of Functional Programming","raw_type":"journal-article"},"sustainable_development_goals":[],"awards":[],"funders":[],"has_content":{"grobid_xml":true,"pdf":true},"content_urls":{"pdf":"https://content.openalex.org/works/W2124274632.pdf","grobid_xml":"https://content.openalex.org/works/W2124274632.grobid-xml"},"referenced_works_count":37,"referenced_works":["https://openalex.org/W569543113","https://openalex.org/W1492124994","https://openalex.org/W1539120745","https://openalex.org/W1541653499","https://openalex.org/W1567903304","https://openalex.org/W1572663059","https://openalex.org/W1575675278","https://openalex.org/W1608714802","https://openalex.org/W1644882639","https://openalex.org/W1649645444","https://openalex.org/W1768450951","https://openalex.org/W1947395352","https://openalex.org/W1981104503","https://openalex.org/W2007094836","https://openalex.org/W2009775190","https://openalex.org/W2051096181","https://openalex.org/W2056253254","https://openalex.org/W2058137890","https://openalex.org/W2078334802","https://openalex.org/W2093896470","https://openalex.org/W2100703235","https://openalex.org/W2116813111","https://openalex.org/W2120703401","https://openalex.org/W2131916293","https://openalex.org/W2137417304","https://openalex.org/W2140647971","https://openalex.org/W2143823533","https://openalex.org/W2173780645","https://openalex.org/W2208923056","https://openalex.org/W2284772643","https://openalex.org/W2561675875","https://openalex.org/W2913998319","https://openalex.org/W3145846323","https://openalex.org/W4213279211","https://openalex.org/W4229799736","https://openalex.org/W4249245425","https://openalex.org/W4254510965"],"related_works":["https://openalex.org/W1688372159","https://openalex.org/W2493130382","https://openalex.org/W2523205872","https://openalex.org/W3087634590","https://openalex.org/W2145738007","https://openalex.org/W2110095505","https://openalex.org/W2168938117","https://openalex.org/W4235669620","https://openalex.org/W2779713464","https://openalex.org/W2971609332"],"abstract_inverted_index":{"Abstract":[0],"This":[1],"paper":[2],"introduces":[3],"a":[4,36,66,81,131],"pattern":[5,63,106],"for":[6,27,71,90],"almost":[7],"compositional":[8,93],"functions":[9],"over":[10,15],"recursive":[11,19],"data":[12,20,73,78,122],"types,":[13,79],"and":[14,51,80,124,127,149],"families":[16],"of":[17,29,39,43,54,65,77,104,133],"mutually":[18],"types.":[21],"Here":[22],"\u201calmost":[23],"compositional\u201d":[24],"means":[25],"that":[26],"all":[28],"the":[30,33,41,44,49,52,56,59,88,91,96,100,105,134,141],"constructors":[31],"in":[32,110,117,128,154],"type(s),":[34],"except":[35],"limited":[37],"number":[38],"them,":[40],"result":[42],"function":[45,57],"depends":[46],"only":[47],"on":[48,58],"constructor":[50],"results":[53],"calling":[55],"constructor's":[60],"arguments.":[61],"The":[62,84,138],"consists":[64],"generic":[67,85,147],"part":[68,86],"constructed":[69],"once":[70],"each":[72],"type":[74,112,156],"or":[75],"family":[76],"task-specific":[82,101],"part.":[83,102],"contains":[87],"code":[89],"predictable":[92],"cases,":[94],"leaving":[95],"interesting":[97],"work":[98],"to":[99,140,146,150],"Examples":[103],"are":[107,158],"given,":[108],"implemented":[109],"dependent":[111,155],"theory":[113],"with":[114,119],"inductive":[115],"families,":[116],"Haskell":[118],"generalized":[120],"algebraic":[121],"types":[123,153],"rank-2":[125],"polymorphism,":[126],"Java":[129],"using":[130,164],"variant":[132],"Visitor":[135],"design":[136],"pattern.":[137],"relationships":[139],"\u201cScrap":[142],"Your":[143],"Boilerplate\u201d":[144],"approach":[145],"programming,":[148],"general":[151],"tree":[152],"theory,":[157],"investigated":[159],"by":[160],"reimplementing":[161],"our":[162],"operations":[163],"those":[165],"frameworks.":[166]},"counts_by_year":[{"year":2020,"cited_by_count":1},{"year":2018,"cited_by_count":1},{"year":2016,"cited_by_count":2},{"year":2014,"cited_by_count":1},{"year":2012,"cited_by_count":2}],"updated_date":"2026-04-23T06:14:38.165362","created_date":"2025-10-10T00:00:00"}
