{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2023,9,4]],"date-time":"2023-09-04T21:56:01Z","timestamp":1693864561249},"reference-count":0,"publisher":"Cambridge University Press (CUP)","issue":"6","license":[{"start":{"date-parts":[[2001,11,28]],"date-time":"2001-11-28T00:00:00Z","timestamp":1006905600000},"content-version":"unspecified","delay-in-days":27,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2001,11]]},"abstract":"<jats:p>Suppose, you want to implement a structured editor for some term type, so that \nthe user can navigate through a given term and perform edit actions on subterms. \nIn this case you are immediately faced with the problem of how to keep track of \nthe cursor movements and the user's edits in a reasonably efficient manner. In a \nprevious pearl, Huet (1997) introduced a simple data structure, the <jats:italic>Zipper<\/jats:italic>, that \naddresses this problem \u2013 we will explain the Zipper briefly in section 2. A drawback \nof the Zipper is that the type of cursor locations depends on the structure of the \nterm type, i.e. each term type gives rise to a different type of location (unless you \nare working in an untyped environment). In this pearl, we present an alternative \ndata structure, the <jats:italic>web<\/jats:italic>, that serves the same purpose, but that is parametric in the \nunderlying term type. Sections 3\u20136 are devoted to the new data structure. Before we \nunravel the Zipper and explore the web, let us first give a taste of their use.<\/jats:p>","DOI":"10.1017\/s0956796801004129","type":"journal-article","created":{"date-parts":[[2008,8,8]],"date-time":"2008-08-08T14:02:49Z","timestamp":1218204169000},"page":"681-689","source":"Crossref","is-referenced-by-count":10,"title":["Weaving a web"],"prefix":"10.1017","volume":"11","author":[{"given":"RALF","family":"HINZE","sequence":"first","affiliation":[]},{"given":"JOHAN","family":"JEURING","sequence":"additional","affiliation":[]}],"member":"56","published-online":{"date-parts":[[2001,11,28]]},"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796801004129","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2019,5,7]],"date-time":"2019-05-07T22:23:00Z","timestamp":1557267780000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796801004129\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2001,11]]},"references-count":0,"journal-issue":{"issue":"6","published-print":{"date-parts":[[2001,11]]}},"alternative-id":["S0956796801004129"],"URL":"https:\/\/doi.org\/10.1017\/s0956796801004129","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2001,11]]}}}