{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:05:42Z","timestamp":1779836742703,"version":"3.53.1"},"reference-count":42,"publisher":"Cambridge University Press (CUP)","issue":"3-4","license":[{"start":{"date-parts":[[2009,7,1]],"date-time":"2009-07-01T00:00:00Z","timestamp":1246406400000},"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":[[2009,7]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>\n                    The\n                    <jats:sc>Iterator<\/jats:sc>\n                    pattern gives a clean interface for element-by-element access to a collection, independent of the collection's shape. Imperative iterations using the pattern have two simultaneous aspects:\n                    <jats:italic>mapping<\/jats:italic>\n                    and\n                    <jats:italic>accumulating<\/jats:italic>\n                    . Various existing functional models of iteration capture one or other of these aspects, but not both simultaneously. We argue that C. McBride and R. Paterson's\n                    <jats:italic>applicative functors<\/jats:italic>\n                    (Applicative programming with effects,\n                    <jats:italic>J. Funct. Program.<\/jats:italic>\n                    ,\n                    <jats:bold>18<\/jats:bold>\n                    (1): 1\u201313, 2008), and in particular the corresponding\n                    <jats:italic>traverse<\/jats:italic>\n                    operator, do exactly this, and therefore capture the essence of the\n                    <jats:sc>Iterator<\/jats:sc>\n                    pattern. Moreover, they do so in a way that nicely supports modular programming. We present some axioms for traversal, discuss modularity concerns and illustrate with a simple example, the\n                    <jats:italic>wordcount<\/jats:italic>\n                    problem.\n                  <\/jats:p>","DOI":"10.1017\/s0956796809007291","type":"journal-article","created":{"date-parts":[[2009,6,9]],"date-time":"2009-06-09T10:05:04Z","timestamp":1244541904000},"page":"377-402","source":"Crossref","is-referenced-by-count":43,"title":["The essence of the\n                    <scp>Iterator<\/scp>\n                    pattern"],"prefix":"10.1017","volume":"19","author":[{"given":"JEREMY","family":"GIBBONS","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"BRUNO C. d. S.","family":"OLIVEIRA","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2009,7,1]]},"reference":[{"key":"S0956796809007291_ref5","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796800003658"},{"key":"S0956796809007291_ref8","unstructured":"GHC Team. (2006) Haskell hierarchical libraries. http:\/\/www.haskell.org\/ghc\/docs\/latest\/html\/libraries\/."},{"key":"S0956796809007291_ref11","first-page":"1","volume-title":"Proceedings of the 2006 ACM SIGPLAN Workshop on Generic Programming, WGP '06 (Portland, OR, Sept. 2006)","author":"Gibbons","year":"2006"},{"key":"S0956796809007291_ref17","doi-asserted-by":"publisher","DOI":"10.1093\/comjnl\/32.2.98"},{"key":"S0956796809007291_ref9","first-page":"148","volume-title":"Revised Lectures from International Summer School and Workshop on Algebraic and Coalgebraic Methods in the Mathematics of Program Construction, ACMMPC 2000","author":"Gibbons","year":"2002"},{"key":"S0956796809007291_ref22","first-page":"97","volume-title":"Tutorial Text from 1st International Spring School on Advanced Functional Programming Techniques, AFP '95","author":"Jones","year":"1995"},{"key":"S0956796809007291_ref42","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-662-02880-3_8"},{"key":"S0956796809007291_ref28","doi-asserted-by":"publisher","DOI":"10.1145\/199448.199476"},{"key":"S0956796809007291_ref38","first-page":"71","volume-title":"Proceedings of the 20th ACM Symposium on Principles of Programming Languages, POPL '93 (Charleston, SC, Jan. 1993)","author":"Peyton Jones","year":"1993"},{"key":"S0956796809007291_ref6","first-page":"751","article-title":"Using program slicing in software maintenance","volume":"17","author":"Gallagher","year":"1991","journal-title":"Using program slicing in software maintenance"},{"key":"S0956796809007291_ref32","first-page":"124","volume-title":"Procedings of the 5th ACM Conference on Functional Programming Languages and Computer Architecture, FPCA '91 (Cambridge, MA, Aug. 1991)","author":"Meijer","year":"1991"},{"key":"S0956796809007291_ref33","first-page":"228","volume-title":"Tutorial Text from 1st International Spring School on Advanced Functional Programming Techniques, AFP '95","author":"Meijer","year":"1995"},{"key":"S0956796809007291_ref41","doi-asserted-by":"publisher","DOI":"10.1145\/99370.99404"},{"key":"S0956796809007291_ref27","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-48743-3_15"},{"key":"S0956796809007291_ref10","doi-asserted-by":"publisher","DOI":"10.1007\/978-1-349-91518-7_3"},{"key":"S0956796809007291_ref4","unstructured":"Fokkinga M. (1994) Monadic maps and folds for arbitrary datatypes. Memoranda Informatica 94-28. Department of Computer Science, University of Twente."},{"key":"S0956796809007291_ref37","volume-title":"The Haskell 98 Language and Libraries: The Revised Report","author":"Peyton Jones","year":"2003"},{"key":"S0956796809007291_ref14","volume-title":"Proceedings of the Workshop on Mathematically Structured Functional Programming, MSFP 2006 (Kuressaare, July 2006)","author":"Gibbons","year":"2006"},{"key":"S0956796809007291_ref13","first-page":"146","volume-title":"Proceedings of the 4th Workshop on Coalgebraic Methods in Computer Science, CMCS 2001 (Genova, Apr. 2001)","author":"Gibbons","year":"2001"},{"key":"S0956796809007291_ref16","first-page":"5","volume-title":"Proceedings of the 2000 ACM SIGPLAN Haskell Workshop, Haskell 2000 (Montreal, Sept. 2000)","author":"Hinze","year":"2001"},{"key":"S0956796809007291_ref29","first-page":"1","article-title":"Applicative programming with effects","volume":"18","author":"McBride","year":"2008","journal-title":"Applicative programming with effects"},{"key":"S0956796809007291_ref19","doi-asserted-by":"publisher","DOI":"10.1016\/S0167-6423(01)00020-X"},{"key":"S0956796809007291_ref36","first-page":"171","volume-title":"Revised Lectures from 5th International School on Advanced Functional Programming, AFP 2004","author":"Pardo","year":"2005"},{"key":"S0956796809007291_ref34","doi-asserted-by":"publisher","DOI":"10.1016\/0890-5401(91)90052-4"},{"key":"S0956796809007291_ref39","first-page":"513","volume-title":"Proceedings of the 9th IFIP World Computer Congress, Information Processing '83 (Paris, Sept. 1983)","author":"Reynolds","year":"1983"},{"key":"S0956796809007291_ref26","unstructured":"Kiselyov O. & L\u00e4mmel R. (2005) Haskell's overlooked object system. ArXiv preprint arXiv:cs\/0509027v1. Available at http:\/\/arxiv.org\/abs\/cs\/0509027v1. (Accessed 4 May 2009)."},{"key":"S0956796809007291_ref20","doi-asserted-by":"publisher","DOI":"10.1016\/0167-6423(95)00015-1"},{"key":"S0956796809007291_ref3","first-page":"81","article-title":"Tupling and mutumorphisms","volume":"1","author":"Fokkinga","year":"1990","journal-title":"Tupling and mutumorphisms"},{"key":"S0956796809007291_ref25","doi-asserted-by":"publisher","DOI":"10.1007\/978-1-4471-3215-8_12"},{"key":"S0956796809007291_ref40","first-page":"35","volume-title":"Proceedings of the 8th Working Conference on Reverse Engineering, WCRE 2001 (Stuttgart, Oct. 2001)","author":"Villavicencio","year":"2001"},{"key":"S0956796809007291_ref12","first-page":"162","volume-title":"Proceedings of the 8th International Conference on Mathematics of Program Construction, MPC 2006 (Kuressaare, July 2006)","author":"Gibbons","year":"2006"},{"key":"S0956796809007291_ref23","unstructured":"Jones M. P. & Duponcheel L. (1993) Composing monads. Technical Report. YALEU\/DCS\/RR-1004. Department of Computer Science, Yale University."},{"key":"S0956796809007291_ref2","first-page":"52","volume-title":"Proceedings of the 4th International Conference on Mathematics of Program Construction, MPC '98 (Marstrand, June 1998)","author":"Bird","year":"1998"},{"key":"S0956796809007291_ref30","first-page":"1","volume-title":"Proceedings of the 8th International Symposium on Programming Languages: Implementations, Logics, and Programs, PLILP '96 (Aachen, Sept. 1996)","author":"Meertens","year":"1996"},{"key":"S0956796809007291_ref31","volume-title":"Proceedings of the Workshop on Generic Programming, WGP '98 (Marstrand, June 1998)","author":"Meertens","year":"1998"},{"key":"S0956796809007291_ref15","first-page":"1","volume-title":"Advanced Lectures from International Summer School and Workshop on Generic Programming, SSGP 2002","author":"Hinze","year":"2003"},{"key":"S0956796809007291_ref21","first-page":"139","volume-title":"Proceedings of the 7th European Symposium on Programming, ESOP '98 (Lisbon, March\/Apr. 1998)","author":"Jay","year":"1998"},{"key":"S0956796809007291_ref1","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0083084"},{"key":"S0956796809007291_ref18","doi-asserted-by":"publisher","DOI":"10.1145\/263699.263763"},{"key":"S0956796809007291_ref35","first-page":"187","volume-title":"Proceedings of the 8th International Conference on Category Theory and Computer Science, CTCS '99 (Edinburgh, Sept. 1999)","author":"Moggi","year":"1999"},{"key":"S0956796809007291_ref7","volume-title":"Design Patterns: Elements of Reusable Object-Oriented Software","author":"Gamma","year":"1995"},{"key":"S0956796809007291_ref24","volume-title":"The C Programming Language","author":"Kernighan","year":"1988"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796809007291","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:36:20Z","timestamp":1779834980000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796809007291\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2009,7]]},"references-count":42,"journal-issue":{"issue":"3-4","published-print":{"date-parts":[[2009,7]]}},"alternative-id":["S0956796809007291"],"URL":"https:\/\/doi.org\/10.1017\/s0956796809007291","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2009,7]]}}}