{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,11,28]],"date-time":"2025-11-28T21:04:15Z","timestamp":1764363855081},"reference-count":0,"publisher":"Cambridge University Press (CUP)","issue":"4","license":[{"start":{"date-parts":[[1998,7,1]],"date-time":"1998-07-01T00:00:00Z","timestamp":899251200000},"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":[[1998,7]]},"abstract":"<jats:p>This paper is a tutorial on defining recursive descent parsers\n in Haskell. In the spirit \nof <jats:italic>one-stop shopping<\/jats:italic>, the paper combines material from three areas\n into a single \nsource. The three areas are functional parsers (Burge, 1975; Wadler, 1985;\n Hutton, \n1992; Fokker, 1995), the use of monads to structure functional programs\n (Wadler, \n1990, 1992a, 1992b), and the use of special syntax for monadic programs\n in Haskell \n(Jones, 1995; Peterson <jats:italic>et al<\/jats:italic>., 1996). More specifically, the paper\n shows how to define \nmonadic parsers using do notation in Haskell.<\/jats:p><jats:p>Of course, recursive descent parsers defined by hand lack the efficiency\n of bottom-up \nparsers generated by machine (Aho <jats:italic>et al<\/jats:italic>., 1986; Mogensen, 1993;\n Gill and \nMarlow, 1995). However, for many research applications, a simple recursive\n descent \nparser is perfectly sufficient. Moreover, while parser generators typically\n offer a \nfixed set of combinators for describing grammars, the method described\n here is \ncompletely extensible: parsers are first-class values, and we have the\n full power of \nHaskell available to define new combinators for special applications. The\n method is \nalso an excellent illustration of the elegance of functional programming.<\/jats:p>","DOI":"10.1017\/s0956796898003050","type":"journal-article","created":{"date-parts":[[2002,7,27]],"date-time":"2002-07-27T13:26:15Z","timestamp":1027776375000},"page":"437-444","source":"Crossref","is-referenced-by-count":121,"title":["Monadic parsing in Haskell"],"prefix":"10.1017","volume":"8","author":[{"given":"GRAHAM","family":"HUTTON","sequence":"first","affiliation":[]},{"given":"ERIK","family":"MEIJER","sequence":"additional","affiliation":[]}],"member":"56","published-online":{"date-parts":[[1998,7,1]]},"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796898003050","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2019,5,10]],"date-time":"2019-05-10T20:31:40Z","timestamp":1557520300000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796898003050\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[1998,7]]},"references-count":0,"journal-issue":{"issue":"4","published-print":{"date-parts":[[1998,7]]}},"alternative-id":["S0956796898003050"],"URL":"https:\/\/doi.org\/10.1017\/s0956796898003050","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[1998,7]]}}}