{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:05:48Z","timestamp":1779836748052,"version":"3.53.1"},"reference-count":4,"publisher":"Cambridge University Press (CUP)","issue":"6","license":[{"start":{"date-parts":[[2012,9,10]],"date-time":"2012-09-10T00:00:00Z","timestamp":1347235200000},"content-version":"unspecified","delay-in-days":0,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2012,11]]},"abstract":"<jats:p>\n                    Many variations upon the theme of parser combinators have been proposed, too many to list here, but the main idea is simple: A parser for phrases of type \u03b1 is a function that takes an input string and produces results (\n                    <jats:italic>x, rest<\/jats:italic>\n                    ), where\n                    <jats:italic>x<\/jats:italic>\n                    is a value of type \u03b1, and\n                    <jats:italic>rest<\/jats:italic>\n                    is the remainder of the input after the phrase with value\n                    <jats:italic>x<\/jats:italic>\n                    has been consumed. The results are often arranged into a list, because this allows a parser to signal failure with the empty list of results, an unambiguous success with one result, or multiple possibilities with a longer \u2018list of successes\u2019.\n                  <\/jats:p>","DOI":"10.1017\/s0956796812000329","type":"journal-article","created":{"date-parts":[[2012,9,10]],"date-time":"2012-09-10T07:11:44Z","timestamp":1347261104000},"page":"747-756","source":"Crossref","is-referenced-by-count":4,"title":["When Maybe is not good enough"],"prefix":"10.1017","volume":"22","author":[{"given":"MICHAEL","family":"SPIVEY","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2012,9,10]]},"reference":[{"key":"S0956796812000329_ref1","doi-asserted-by":"publisher","DOI":"10.1007\/BF00289517"},{"key":"S0956796812000329_ref3","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796807006326"},{"key":"S0956796812000329_ref4","volume-title":"Introduction to the Theory of Computation.","author":"Sipser","year":"2005"},{"key":"S0956796812000329_ref2","volume-title":"Selected Papers on Computer Languages","author":"Knuth","year":"2003"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796812000329","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:36:27Z","timestamp":1779834987000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796812000329\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2012,9,10]]},"references-count":4,"journal-issue":{"issue":"6","published-print":{"date-parts":[[2012,11]]}},"alternative-id":["S0956796812000329"],"URL":"https:\/\/doi.org\/10.1017\/s0956796812000329","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2012,9,10]]}}}