{"id":"https://openalex.org/W3104645646","doi":"https://doi.org/10.1145/3236798","title":"Merlin: a language server for OCaml (experience report)","display_name":"Merlin: a language server for OCaml (experience report)","publication_year":2018,"publication_date":"2018-07-30","ids":{"openalex":"https://openalex.org/W3104645646","doi":"https://doi.org/10.1145/3236798","mag":"3104645646"},"language":"en","primary_location":{"id":"doi:10.1145/3236798","is_oa":true,"landing_page_url":"https://doi.org/10.1145/3236798","pdf_url":"https://dl.acm.org/doi/pdf/10.1145/3236798","source":{"id":"https://openalex.org/S4210216081","display_name":"Proceedings of the ACM on Programming Languages","issn_l":"2475-1421","issn":["2475-1421"],"is_oa":true,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4310319798","host_organization_name":"Association for Computing Machinery","host_organization_lineage":["https://openalex.org/P4310319798"],"host_organization_lineage_names":["Association for Computing Machinery"],"type":"journal"},"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Proceedings of the ACM on Programming Languages","raw_type":"journal-article"},"type":"article","indexed_in":["arxiv","crossref"],"open_access":{"is_oa":true,"oa_status":"diamond","oa_url":"https://dl.acm.org/doi/pdf/10.1145/3236798","any_repository_has_fulltext":true},"authorships":[{"author_position":"first","author":{"id":null,"display_name":"Fr\u00e9d\u00e9ric Bour","orcid":null},"institutions":[{"id":"https://openalex.org/I2252078561","display_name":"Meta (Israel)","ror":"https://ror.org/02388em19","country_code":"IL","type":"company","lineage":["https://openalex.org/I2252078561","https://openalex.org/I4210114444"]}],"countries":["IL"],"is_corresponding":false,"raw_author_name":"Fr\u00e9d\u00e9ric Bour","raw_affiliation_strings":["Facebook, France"],"raw_orcid":null,"affiliations":[{"raw_affiliation_string":"Facebook, France","institution_ids":["https://openalex.org/I2252078561"]}]},{"author_position":"middle","author":{"id":null,"display_name":"Thomas Refis","orcid":null},"institutions":[],"countries":[],"is_corresponding":false,"raw_author_name":"Thomas Refis","raw_affiliation_strings":["Jane Street, UK"],"raw_orcid":null,"affiliations":[{"raw_affiliation_string":"Jane Street, UK","institution_ids":[]}]},{"author_position":"last","author":{"id":null,"display_name":"Gabriel Scherer","orcid":null},"institutions":[{"id":"https://openalex.org/I1326498283","display_name":"Institut national de recherche en sciences et technologies du num\u00e9rique","ror":"https://ror.org/02kvxyf05","country_code":"FR","type":"government","lineage":["https://openalex.org/I1326498283"]}],"countries":["FR"],"is_corresponding":false,"raw_author_name":"Gabriel Scherer","raw_affiliation_strings":["Inria, France"],"raw_orcid":null,"affiliations":[{"raw_affiliation_string":"Inria, France","institution_ids":["https://openalex.org/I1326498283"]}]}],"institutions":[],"countries_distinct_count":2,"institutions_distinct_count":2,"corresponding_author_ids":[],"corresponding_institution_ids":[],"apc_list":null,"apc_paid":null,"fwci":1.1066,"has_fulltext":true,"cited_by_count":14,"citation_normalized_percentile":{"value":0.84702969,"is_in_top_1_percent":false,"is_in_top_10_percent":false},"cited_by_percentile_year":{"min":89,"max":97},"biblio":{"volume":"2","issue":"ICFP","first_page":"1","last_page":"15"},"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.54830002784729,"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.54830002784729,"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/T10260","display_name":"Software Engineering Research","score":0.13130000233650208,"subfield":{"id":"https://openalex.org/subfields/1710","display_name":"Information Systems"},"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/T10533","display_name":"Teaching and Learning Programming","score":0.05169999971985817,"subfield":{"id":"https://openalex.org/subfields/1706","display_name":"Computer Science Applications"},"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/daemon","display_name":"Daemon","score":0.8041999936103821},{"id":"https://openalex.org/keywords/syntax","display_name":"Syntax","score":0.517300009727478},{"id":"https://openalex.org/keywords/syntax-error","display_name":"Syntax error","score":0.4440999925136566},{"id":"https://openalex.org/keywords/code","display_name":"Code (set theory)","score":0.4230000078678131},{"id":"https://openalex.org/keywords/parsing","display_name":"Parsing","score":0.3878999948501587},{"id":"https://openalex.org/keywords/high-level-programming-language","display_name":"High-level programming language","score":0.37380000948905945},{"id":"https://openalex.org/keywords/programming-language-implementation","display_name":"Programming language implementation","score":0.3352999985218048},{"id":"https://openalex.org/keywords/first-generation-programming-language","display_name":"First-generation programming language","score":0.32679998874664307}],"concepts":[{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.8837000131607056},{"id":"https://openalex.org/C199360897","wikidata":"https://www.wikidata.org/wiki/Q9143","display_name":"Programming language","level":1,"score":0.8068000078201294},{"id":"https://openalex.org/C2777253204","wikidata":"https://www.wikidata.org/wiki/Q308980","display_name":"Daemon","level":2,"score":0.8041999936103821},{"id":"https://openalex.org/C60048249","wikidata":"https://www.wikidata.org/wiki/Q37437","display_name":"Syntax","level":2,"score":0.517300009727478},{"id":"https://openalex.org/C11742125","wikidata":"https://www.wikidata.org/wiki/Q1195374","display_name":"Syntax error","level":4,"score":0.4440999925136566},{"id":"https://openalex.org/C2776760102","wikidata":"https://www.wikidata.org/wiki/Q5139990","display_name":"Code (set theory)","level":3,"score":0.4230000078678131},{"id":"https://openalex.org/C186644900","wikidata":"https://www.wikidata.org/wiki/Q194152","display_name":"Parsing","level":2,"score":0.3878999948501587},{"id":"https://openalex.org/C19024347","wikidata":"https://www.wikidata.org/wiki/Q211496","display_name":"High-level programming language","level":3,"score":0.37380000948905945},{"id":"https://openalex.org/C201997060","wikidata":"https://www.wikidata.org/wiki/Q4117406","display_name":"Programming language implementation","level":5,"score":0.3352999985218048},{"id":"https://openalex.org/C570499","wikidata":"https://www.wikidata.org/wiki/Q1289116","display_name":"First-generation programming language","level":3,"score":0.32679998874664307},{"id":"https://openalex.org/C34165917","wikidata":"https://www.wikidata.org/wiki/Q188267","display_name":"Programming paradigm","level":2,"score":0.31769999861717224},{"id":"https://openalex.org/C20724563","wikidata":"https://www.wikidata.org/wiki/Q3075258","display_name":"Language primitive","level":4,"score":0.3037000000476837},{"id":"https://openalex.org/C48859967","wikidata":"https://www.wikidata.org/wiki/Q6486712","display_name":"Language construct","level":2,"score":0.3028999865055084},{"id":"https://openalex.org/C93996380","wikidata":"https://www.wikidata.org/wiki/Q44127","display_name":"Server","level":2,"score":0.29840001463890076},{"id":"https://openalex.org/C115903868","wikidata":"https://www.wikidata.org/wiki/Q80993","display_name":"Software engineering","level":1,"score":0.296999990940094},{"id":"https://openalex.org/C94922259","wikidata":"https://www.wikidata.org/wiki/Q33215","display_name":"Constructed language","level":2,"score":0.29109999537467957},{"id":"https://openalex.org/C42383842","wikidata":"https://www.wikidata.org/wiki/Q193076","display_name":"Functional programming","level":2,"score":0.2743000090122223},{"id":"https://openalex.org/C2986567400","wikidata":"https://www.wikidata.org/wiki/Q15777","display_name":"C programming language","level":3,"score":0.2547999918460846},{"id":"https://openalex.org/C169796678","wikidata":"https://www.wikidata.org/wiki/Q835124","display_name":"Very high-level programming language","level":5,"score":0.2515999972820282},{"id":"https://openalex.org/C15077461","wikidata":"https://www.wikidata.org/wiki/Q7248507","display_name":"Programming language specification","level":5,"score":0.2508000135421753}],"mesh":[],"locations_count":3,"locations":[{"id":"doi:10.1145/3236798","is_oa":true,"landing_page_url":"https://doi.org/10.1145/3236798","pdf_url":"https://dl.acm.org/doi/pdf/10.1145/3236798","source":{"id":"https://openalex.org/S4210216081","display_name":"Proceedings of the ACM on Programming Languages","issn_l":"2475-1421","issn":["2475-1421"],"is_oa":true,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4310319798","host_organization_name":"Association for Computing Machinery","host_organization_lineage":["https://openalex.org/P4310319798"],"host_organization_lineage_names":["Association for Computing Machinery"],"type":"journal"},"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Proceedings of the ACM on Programming Languages","raw_type":"journal-article"},{"id":"pmh:oai:arXiv.org:1807.06702","is_oa":true,"landing_page_url":"http://arxiv.org/abs/1807.06702","pdf_url":"https://arxiv.org/pdf/1807.06702","source":{"id":"https://openalex.org/S4306400194","display_name":"arXiv (Cornell University)","issn_l":"2331-8422","issn":["2331-8422"],"is_oa":true,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/I205783295","host_organization_name":"Cornell University","host_organization_lineage":["https://openalex.org/I205783295"],"host_organization_lineage_names":[],"type":"repository"},"license":null,"license_id":null,"version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":null,"raw_type":"text"},{"id":"pmh:oai:HAL:hal-01929161v1","is_oa":true,"landing_page_url":"https://inria.hal.science/hal-01929161","pdf_url":null,"source":{"id":"https://openalex.org/S4306402512","display_name":"HAL (Le Centre pour la Communication Scientifique Directe)","issn_l":null,"issn":null,"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/I1294671590","host_organization_name":"Centre National de la Recherche Scientifique","host_organization_lineage":["https://openalex.org/I1294671590"],"host_organization_lineage_names":[],"type":"repository"},"license":"other-oa","license_id":"https://openalex.org/licenses/other-oa","version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"Proceedings of the ACM on Programming Languages, 2018, 2 (ICFP), pp.1 - 15. &#x27E8;10.1145/3236798&#x27E9;","raw_type":"info:eu-repo/semantics/article"}],"best_oa_location":{"id":"doi:10.1145/3236798","is_oa":true,"landing_page_url":"https://doi.org/10.1145/3236798","pdf_url":"https://dl.acm.org/doi/pdf/10.1145/3236798","source":{"id":"https://openalex.org/S4210216081","display_name":"Proceedings of the ACM on Programming Languages","issn_l":"2475-1421","issn":["2475-1421"],"is_oa":true,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4310319798","host_organization_name":"Association for Computing Machinery","host_organization_lineage":["https://openalex.org/P4310319798"],"host_organization_lineage_names":["Association for Computing Machinery"],"type":"journal"},"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Proceedings of the ACM on Programming Languages","raw_type":"journal-article"},"sustainable_development_goals":[],"awards":[],"funders":[],"has_content":{"grobid_xml":true,"pdf":true},"content_urls":{"pdf":"https://content.openalex.org/works/W3104645646.pdf","grobid_xml":"https://content.openalex.org/works/W3104645646.grobid-xml"},"referenced_works_count":5,"referenced_works":["https://openalex.org/W2020749411","https://openalex.org/W2049946917","https://openalex.org/W2051078183","https://openalex.org/W2154464718","https://openalex.org/W2293819066"],"related_works":[],"abstract_inverted_index":{"We":[0,183],"report":[1,162,187],"on":[2,49,163],"the":[3,12,40,56,59,92,119,124,145,152,166],"experience":[4,186],"of":[5,39,55,165,190,194],"developing":[6],"Merlin,":[7],"a":[8,22,36],"language":[9,15,42,196],"server":[10],"for":[11,128,198],"OCaml":[13,125],"programming":[14,41,177,200],"in":[16,138,169],"development":[17],"since":[18],"2013.":[19],"Merlin":[20,86,147],"is":[21],"daemon":[23],"that":[24,34,123,155],"connects":[25],"to":[26,62,68,76,79,102,134,188,192],"your":[27],"favourite":[28],"text":[29],"editor":[30,172],"and":[31,44,51,71,74,98,107,114,161,208],"provides":[32],"services":[33],"require":[35],"fine-grained":[37],"understanding":[38],"syntax":[43],"static":[45],"semantics:":[46],"instant":[47],"feedback":[48],"warnings":[50],"errors,":[52],"autocompletion,":[53],"\"type":[54],"code":[57],"under":[58],"cursor\",":[60],"\"go":[61],"definition\",":[63],"etc.":[64],"Language":[65],"servers":[66],"need":[67],"handle":[69],"incomplete":[70],"partially-incorrect":[72],"programs,":[73],"try":[75],"be":[77,132,189,206],"incremental":[78],"minimize":[80],"recomputation":[81],"after":[82],"small":[83],"editing":[84],"actions.":[85],"was":[87],"built":[88],"by":[89,118],"carefully":[90],"adapting":[91],"existing":[93],"tools":[94],"(the":[95],"OCamllex":[96],"lexer":[97],"Menhir":[99],"parser":[100],"generators)":[101],"better":[103],"support":[104],"incrementality,":[105,142],"incompleteness":[106],"error":[108],"handling.":[109],"These":[110],"extensions":[111],"are":[112],"elegant":[113],"general,":[115],"as":[116,214],"demonstrated":[117],"interesting,":[120],"unplanned":[121],"uses":[122],"community":[126],"found":[127],"them.":[129],"They":[130],"could":[131],"adapted":[133],"other":[135],"frontends":[136],"--":[137],"any":[139,199],"language.":[140],"Besides":[141],"we":[143],"discuss":[144],"way":[146],"communicates":[148],"with":[149],"editors,":[150],"describe":[151],"design":[153,203],"decisions":[154],"went":[156],"into":[157],"some":[158,164,209],"demanding":[159],"features":[160],"non-apparent":[167],"difficulties":[168],"building":[170],"good":[171],"support,":[173],"emerging":[174],"from":[175],"expressive":[176],"languages":[178],"or":[179],"frustrating":[180],"tooling":[181,197],"ecosystems.":[182],"expect":[184],"this":[185],"interest":[191],"authors":[193],"interactive":[195],"language;":[201],"many":[202],"choices":[204],"may":[205],"reused,":[207],"hard-won":[210],"lessons":[211],"can":[212],"serve":[213],"warnings.":[215]},"counts_by_year":[{"year":2025,"cited_by_count":2},{"year":2024,"cited_by_count":2},{"year":2023,"cited_by_count":3},{"year":2022,"cited_by_count":1},{"year":2021,"cited_by_count":2},{"year":2020,"cited_by_count":2},{"year":2019,"cited_by_count":1},{"year":2018,"cited_by_count":1}],"updated_date":"2026-08-05T07:39:15.569665","created_date":"2020-11-23T00:00:00"}
