{"id":"https://openalex.org/W4414067080","doi":"https://doi.org/10.1017/s0956796825100075","title":"Automatically testing console I/O behavior of student submissions in Haskell","display_name":"Automatically testing console I/O behavior of student submissions in Haskell","publication_year":2025,"publication_date":"2025-01-01","ids":{"openalex":"https://openalex.org/W4414067080","doi":"https://doi.org/10.1017/s0956796825100075"},"language":"en","primary_location":{"id":"doi:10.1017/s0956796825100075","is_oa":true,"landing_page_url":"https://doi.org/10.1017/s0956796825100075","pdf_url":null,"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":"cc-by","license_id":"https://openalex.org/licenses/cc-by","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":"hybrid","oa_url":"https://doi.org/10.1017/s0956796825100075","any_repository_has_fulltext":false},"authorships":[{"author_position":"first","author":{"id":"https://openalex.org/A5069883065","display_name":"Oliver Westphal","orcid":"https://orcid.org/0000-0001-8947-0348"},"institutions":[{"id":"https://openalex.org/I62318514","display_name":"University of Duisburg-Essen","ror":"https://ror.org/04mz5ra38","country_code":"DE","type":"education","lineage":["https://openalex.org/I62318514"]}],"countries":["DE"],"is_corresponding":true,"raw_author_name":"OLIVER WESTPHAL","raw_affiliation_strings":["Universit\u00e4t Duisburg-Essen"],"affiliations":[{"raw_affiliation_string":"Universit\u00e4t Duisburg-Essen","institution_ids":["https://openalex.org/I62318514"]}]},{"author_position":"last","author":{"id":"https://openalex.org/A5026029995","display_name":"Janis Voigtl\u00e4nder","orcid":"https://orcid.org/0009-0001-2411-9909"},"institutions":[{"id":"https://openalex.org/I62318514","display_name":"University of Duisburg-Essen","ror":"https://ror.org/04mz5ra38","country_code":"DE","type":"education","lineage":["https://openalex.org/I62318514"]}],"countries":["DE"],"is_corresponding":false,"raw_author_name":"JANIS VOIGTL\u00c4NDER","raw_affiliation_strings":["Universit\u00e4t Duisburg-Essen"],"affiliations":[{"raw_affiliation_string":"Universit\u00e4t Duisburg-Essen","institution_ids":["https://openalex.org/I62318514"]}]}],"institutions":[],"countries_distinct_count":1,"institutions_distinct_count":2,"corresponding_author_ids":["https://openalex.org/A5069883065"],"corresponding_institution_ids":["https://openalex.org/I62318514"],"apc_list":null,"apc_paid":null,"fwci":0.0,"has_fulltext":false,"cited_by_count":0,"citation_normalized_percentile":{"value":0.25510629,"is_in_top_1_percent":false,"is_in_top_10_percent":false},"cited_by_percentile_year":null,"biblio":{"volume":"35","issue":null,"first_page":null,"last_page":null},"is_retracted":false,"is_paratext":false,"is_xpac":false,"primary_topic":{"id":"https://openalex.org/T10743","display_name":"Software Testing and Debugging Techniques","score":0.9991000294685364,"subfield":{"id":"https://openalex.org/subfields/1712","display_name":"Software"},"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/T10743","display_name":"Software Testing and Debugging Techniques","score":0.9991000294685364,"subfield":{"id":"https://openalex.org/subfields/1712","display_name":"Software"},"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/T10054","display_name":"Parallel Computing and Optimization Techniques","score":0.9966999888420105,"subfield":{"id":"https://openalex.org/subfields/1708","display_name":"Hardware and Architecture"},"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/T11424","display_name":"Security and Verification in Computing","score":0.9937000274658203,"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.8925999999046326},{"id":"https://openalex.org/keywords/correctness","display_name":"Correctness","score":0.7282999753952026},{"id":"https://openalex.org/keywords/functional-programming","display_name":"Functional programming","score":0.629800021648407},{"id":"https://openalex.org/keywords/task","display_name":"Task (project management)","score":0.5097000002861023},{"id":"https://openalex.org/keywords/tracing","display_name":"Tracing","score":0.5045999884605408},{"id":"https://openalex.org/keywords/clarity","display_name":"CLARITY","score":0.4717000126838684},{"id":"https://openalex.org/keywords/simple","display_name":"Simple (philosophy)","score":0.4528999924659729},{"id":"https://openalex.org/keywords/grading","display_name":"Grading (engineering)","score":0.43149998784065247}],"concepts":[{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.9244999885559082},{"id":"https://openalex.org/C2780624054","wikidata":"https://www.wikidata.org/wiki/Q34010","display_name":"Haskell","level":3,"score":0.8925999999046326},{"id":"https://openalex.org/C55439883","wikidata":"https://www.wikidata.org/wiki/Q360812","display_name":"Correctness","level":2,"score":0.7282999753952026},{"id":"https://openalex.org/C199360897","wikidata":"https://www.wikidata.org/wiki/Q9143","display_name":"Programming language","level":1,"score":0.7215999960899353},{"id":"https://openalex.org/C42383842","wikidata":"https://www.wikidata.org/wiki/Q193076","display_name":"Functional programming","level":2,"score":0.629800021648407},{"id":"https://openalex.org/C2780451532","wikidata":"https://www.wikidata.org/wiki/Q759676","display_name":"Task (project management)","level":2,"score":0.5097000002861023},{"id":"https://openalex.org/C138673069","wikidata":"https://www.wikidata.org/wiki/Q322229","display_name":"Tracing","level":2,"score":0.5045999884605408},{"id":"https://openalex.org/C2777146004","wikidata":"https://www.wikidata.org/wiki/Q14949826","display_name":"CLARITY","level":2,"score":0.4717000126838684},{"id":"https://openalex.org/C2780586882","wikidata":"https://www.wikidata.org/wiki/Q7520643","display_name":"Simple (philosophy)","level":2,"score":0.4528999924659729},{"id":"https://openalex.org/C2777286243","wikidata":"https://www.wikidata.org/wiki/Q5591926","display_name":"Grading (engineering)","level":2,"score":0.43149998784065247},{"id":"https://openalex.org/C115903868","wikidata":"https://www.wikidata.org/wiki/Q80993","display_name":"Software engineering","level":1,"score":0.3562999963760376},{"id":"https://openalex.org/C2776372474","wikidata":"https://www.wikidata.org/wiki/Q508291","display_name":"Simplicity","level":2,"score":0.33899998664855957},{"id":"https://openalex.org/C107457646","wikidata":"https://www.wikidata.org/wiki/Q207434","display_name":"Human\u2013computer interaction","level":1,"score":0.3375000059604645},{"id":"https://openalex.org/C168065819","wikidata":"https://www.wikidata.org/wiki/Q845566","display_name":"Debugging","level":2,"score":0.3240000009536743},{"id":"https://openalex.org/C14036430","wikidata":"https://www.wikidata.org/wiki/Q3736076","display_name":"Function (biology)","level":2,"score":0.3140000104904175},{"id":"https://openalex.org/C98183937","wikidata":"https://www.wikidata.org/wiki/Q2112188","display_name":"Program analysis","level":2,"score":0.29820001125335693},{"id":"https://openalex.org/C2778143727","wikidata":"https://www.wikidata.org/wiki/Q1820650","display_name":"Readability","level":2,"score":0.2897999882698059},{"id":"https://openalex.org/C154945302","wikidata":"https://www.wikidata.org/wiki/Q11660","display_name":"Artificial intelligence","level":1,"score":0.2720000147819519},{"id":"https://openalex.org/C2779960059","wikidata":"https://www.wikidata.org/wiki/Q7113681","display_name":"Overhead (engineering)","level":2,"score":0.27090001106262207},{"id":"https://openalex.org/C162319229","wikidata":"https://www.wikidata.org/wiki/Q175263","display_name":"Data structure","level":2,"score":0.26570001244544983},{"id":"https://openalex.org/C116253237","wikidata":"https://www.wikidata.org/wiki/Q1437424","display_name":"Formal specification","level":2,"score":0.25949999690055847},{"id":"https://openalex.org/C33857546","wikidata":"https://www.wikidata.org/wiki/Q80006","display_name":"Computer programming","level":2,"score":0.2565999925136566},{"id":"https://openalex.org/C182306322","wikidata":"https://www.wikidata.org/wiki/Q1779371","display_name":"Order (exchange)","level":2,"score":0.25189998745918274}],"mesh":[],"locations_count":2,"locations":[{"id":"doi:10.1017/s0956796825100075","is_oa":true,"landing_page_url":"https://doi.org/10.1017/s0956796825100075","pdf_url":null,"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":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Journal of Functional Programming","raw_type":"journal-article"},{"id":"pmh:oai:bibliographie.ub.uni-due.de:ubo_mods_00235442","is_oa":false,"landing_page_url":"https://doi.org/10.1017/S0956796825100075","pdf_url":null,"source":{"id":"https://openalex.org/S7407055102","display_name":"Universit\u00e4tsbibliographie, Universit\u00e4t Duisburg-Essen","issn_l":null,"issn":null,"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":null,"host_organization_name":null,"host_organization_lineage":[],"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":"Artikel/Aufsatz"}],"best_oa_location":{"id":"doi:10.1017/s0956796825100075","is_oa":true,"landing_page_url":"https://doi.org/10.1017/s0956796825100075","pdf_url":null,"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":"cc-by","license_id":"https://openalex.org/licenses/cc-by","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":{"pdf":false,"grobid_xml":false},"content_urls":null,"referenced_works_count":24,"referenced_works":["https://openalex.org/W1784055113","https://openalex.org/W2017114730","https://openalex.org/W2031872041","https://openalex.org/W2080718905","https://openalex.org/W2101512909","https://openalex.org/W2107147876","https://openalex.org/W2117058582","https://openalex.org/W2139597778","https://openalex.org/W2140046123","https://openalex.org/W2176407799","https://openalex.org/W2338984668","https://openalex.org/W2751010797","https://openalex.org/W2763801910","https://openalex.org/W2794800068","https://openalex.org/W2894540915","https://openalex.org/W3021104605","https://openalex.org/W3086988866","https://openalex.org/W3163662525","https://openalex.org/W3164241041","https://openalex.org/W4206275750","https://openalex.org/W4247126285","https://openalex.org/W4255736263","https://openalex.org/W4308205574","https://openalex.org/W4412890830"],"related_works":["https://openalex.org/W2112263414","https://openalex.org/W3004782279","https://openalex.org/W1602185604","https://openalex.org/W2028779182","https://openalex.org/W1975276861","https://openalex.org/W4242678340","https://openalex.org/W2140654465","https://openalex.org/W1591331302","https://openalex.org/W1671914757","https://openalex.org/W1966969028"],"abstract_inverted_index":{"Abstract":[0],"Good":[1],"test-suites":[2,47],"are":[3,14,126],"an":[4,79,254],"important":[5,80],"tool":[6],"to":[7,27,31,89,131,157,180,273],"check":[8,28],"the":[9,58,63,69,92,109,141,162,166,208,220,261,265,279],"correctness":[10],"of":[11,71,82,113,144,165,195,215,260,267],"programs.":[12],"They":[13],"also":[15],"essential":[16,128],"in":[17,102,129,185,202,236,253,271],"unsupervised":[18],"educational":[19],"settings,":[20],"like":[21,51,88],"automatic":[22],"grading":[23],"or":[24,192],"for":[25,115,278],"students":[26,91],"their":[29],"solution":[30],"some":[32],"programming":[33,40],"task":[34],"by":[35,147],"themselves.":[36],"For":[37],"most":[38],"Haskell":[39],"tasks,":[41],"one":[42],"can":[43],"easily":[44],"provide":[45,90],"high-quality":[46],"using":[48],"standard":[49,110],"tools":[50],"QuickCheck.":[52],"Unfortunately,":[53],"this":[54,240],"is":[55,78,178,226,264],"no":[56],"longer":[57],"case":[59],"once":[60],"we":[61,86,170,243],"leave":[62],"purely":[64],"functional":[65],"world":[66],"and":[67,85,152,190,213,229],"enter":[68],"lands":[70],"console":[72,76,104,118,142],"I/O.":[73],"Nonetheless,":[74],"understanding":[75],"I/O":[77,105],"part":[81],"learning":[83],"Haskell,":[84],"would":[87],"same":[93,209],"support":[94,114],"as":[95,120,137,193,197,199,201],"with":[96],"other":[97],"subject":[98],"matters.":[99],"The":[100,176],"difficulty":[101],"testing":[103,246,250,262],"programs":[106],"arises":[107],"from":[108],"tools\u2019":[111],"lack":[112],"specifying":[116],"intended":[117,163],"interactions":[119,125,143],"simple":[121],"declarative":[122],"properties.":[123],"These":[124],"however":[127],"order":[130,156,272],"determine":[132],"whether":[133],"a":[134,145,172,232,245,268],"program":[135,146,167,280],"behaves":[136],"desired.":[138],"We":[139,217],"describe":[140,158],"tracing":[148],"its":[149],"text":[150],"input":[151,276],"output":[153],"actions.":[154],"In":[155],"which":[159],"traces":[160],"match":[161],"behavior":[164,183,225],"under":[168,281],"test,":[169],"present":[171],"formal":[173],"specification":[174,241],"language.":[175],"language":[177],"designed":[179],"capture":[181],"interactive":[182,228],"found":[184],"commonly":[186],"used":[187],"textbook":[188],"exercises":[189],"examples,":[191],"much":[194],"it":[196],"possible,":[198],"well":[200],"our":[203],"own":[204],"teaching,":[205],"while":[206],"at":[207],"time":[210],"retaining":[211],"simplicity":[212],"clarity":[214],"specifications.":[216],"intentionally":[218],"restrict":[219],"language,":[221,242],"ensuring":[222],"that":[223,248],"expressed":[224],"truly":[227],"not":[230],"simply":[231],"pure":[233],"string-builder":[234],"function":[235],"disguise.":[237],"Based":[238],"on":[239],"build":[244],"framework":[247],"allows":[249],"against":[251],"specifications":[252],"automated":[255],"way.":[256],"A":[257],"central":[258],"feature":[259],"procedure":[263],"use":[266],"constraint":[269],"solver":[270],"find":[274],"meaningful":[275],"sequences":[277],"test.":[282]},"counts_by_year":[],"updated_date":"2026-03-07T16:01:11.037858","created_date":"2025-10-10T00:00:00"}
