{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:05:37Z","timestamp":1779836737898,"version":"3.53.1"},"reference-count":61,"publisher":"Cambridge University Press (CUP)","issue":"4","license":[{"start":{"date-parts":[[2014,7,3]],"date-time":"2014-07-03T00:00:00Z","timestamp":1404345600000},"content-version":"unspecified","delay-in-days":2,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2014,7]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>\n                    When writing transformation systems, a significant amount of engineering effort goes into setting up the infrastructure needed to direct individual transformations to specific targets in the data being transformed.\n                    <jats:italic>Strategic programming languages<\/jats:italic>\n                    provide general-purpose infrastructure for this task, which the author of a transformation system can use for any algebraic data structure. The Kansas University Rewrite Engine (KURE) is a typed strategic programming language, implemented as a Haskell-embedded domain-specific language. KURE is designed to support\n                    <jats:italic>typed<\/jats:italic>\n                    transformations over\n                    <jats:italic>typed<\/jats:italic>\n                    data, and the main challenge is how to make such transformations compatible with generic traversal strategies that should operate over\n                    <jats:italic>any<\/jats:italic>\n                    type. Strategic programming in a typed setting has much in common with\n                    <jats:italic>datatype-generic programming<\/jats:italic>\n                    . Compared to other approaches to datatype-generic programming, the distinguishing feature of KURE's solution is that the user can configure the behaviour of traversals based on the\n                    <jats:italic>location<\/jats:italic>\n                    of each datum in the tree, beyond their behaviour being determined by the\n                    <jats:italic>type<\/jats:italic>\n                    of each datum. This article describes KURE's approach to assigning types to generic traversals, and the implementation of that approach. We also compare KURE, its design choices, and their consequences, with other approaches to strategic and datatype-generic programming.\n                  <\/jats:p>","DOI":"10.1017\/s0956796814000185","type":"journal-article","created":{"date-parts":[[2014,7,3]],"date-time":"2014-07-03T09:06:03Z","timestamp":1404378363000},"page":"434-473","source":"Crossref","is-referenced-by-count":5,"title":["The Kansas University rewrite engine"],"prefix":"10.1017","volume":"24","author":[{"given":"NEIL","family":"SCULTHORPE","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"NICOLAS","family":"FRISBY","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"ANDY","family":"GILL","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2014,7,3]]},"reference":[{"key":"S0956796814000185_ref40","unstructured":"O'Connor R. (2011) Functor is to Lens as Applicative is to Biplate: Introducing Multiplate. Workshop on generic programming. Available at http:\/\/arxiv.org\/abs\/1103.2841."},{"key":"S0956796814000185_ref44","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796806006034"},{"key":"S0956796814000185_ref37","doi-asserted-by":"publisher","DOI":"10.1145\/1291201.1291208"},{"key":"S0956796814000185_ref10","unstructured":"Dolstra E. & Visser E. (2001) First-Class Rules and Generic Traversal. Tech. rept. UU-CS-2001-38. Utrecht University, Utrecht."},{"key":"S0956796814000185_ref36","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796807006326"},{"key":"S0956796814000185_ref9","unstructured":"Dolstra E. (2001) First Class Rules and Generic Traversals for Program Transformation Languages, Master's thesis, Utrecht University."},{"key":"S0956796814000185_ref43","first-page":"327","volume-title":"International Conference on Functional Programming","author":"Peyton Jones","year":"2007"},{"key":"S0956796814000185_ref33","first-page":"333","volume-title":"Symposium on Principles of Programming Languages","author":"Liang","year":"1995"},{"key":"S0956796814000185_ref30","first-page":"26","volume-title":"Types in Languages Design and Implementation","author":"L\u00e4mmel","year":"2003"},{"key":"S0956796814000185_ref56","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-25935-0_13"},{"key":"S0956796814000185_ref13","doi-asserted-by":"publisher","DOI":"10.1145\/2517208.2517210"},{"key":"S0956796814000185_ref14","doi-asserted-by":"crossref","first-page":"149","DOI":"10.1145\/2364506.2364526","volume-title":"Haskell Symposium","author":"Erdweg","year":"2012"},{"key":"S0956796814000185_ref29","first-page":"285","volume-title":"Symposium on Principles of Programming Languages","author":"Klein","year":"2012"},{"key":"S0956796814000185_ref57","doi-asserted-by":"publisher","DOI":"10.1016\/j.jsc.2004.12.011"},{"key":"S0956796814000185_ref58","unstructured":"Visser E. (2013). Personal communication."},{"key":"S0956796814000185_ref18","first-page":"1","volume-title":"Workshop on Generic Programming","author":"Frisby","year":"2012"},{"key":"S0956796814000185_ref24","first-page":"150","volume-title":"International spring school on datatype-generic programming 2006","author":"Hinze","year":"2007"},{"key":"S0956796814000185_ref2","first-page":"97","volume-title":"Eighth International Workshop on Rule Based Programming","author":"Balland","year":"2008"},{"key":"S0956796814000185_ref38","first-page":"96","volume-title":"Workshop on Generic Programming","author":"Moors","year":"2006"},{"key":"S0956796814000185_ref11","first-page":"533","volume-title":"Symposium on Principles of Programming Languages","author":"Ellison","year":"2012"},{"key":"S0956796814000185_ref28","unstructured":"Kiselyov O. (2006) Smash your boiler-plate without class and typeable. http:\/\/article.gmane.org\/gmane.comp.lang.haskell.general\/14086."},{"key":"S0956796814000185_ref59","first-page":"13","volume-title":"International Conference on Functional Programming","author":"Visser","year":"1998"},{"key":"S0956796814000185_ref39","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796810000183"},{"key":"S0956796814000185_ref21","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-03034-5_14"},{"key":"S0956796814000185_ref4","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796808006898"},{"key":"S0956796814000185_ref12","first-page":"391","volume-title":"International Conference on Object-Oriented Programming, Systems, Languages, and Applications","author":"Erdweg","year":"2011"},{"key":"S0956796814000185_ref22","unstructured":"Gill A. (2013) http:\/\/hackage.haskell.org\/package\/html-kure."},{"key":"S0956796814000185_ref45","first-page":"408","volume-title":"Colloque sur la programmation","author":"Reynolds","year":"1974"},{"key":"S0956796814000185_ref53","first-page":"53","volume-title":"International Workshop on Types in Language Design and Implementation","author":"Sulzmann","year":"2007"},{"key":"S0956796814000185_ref31","first-page":"137","volume-title":"International Symposium on Practical Aspects of Declarative Programming","author":"L\u00e4mmel","year":"2002"},{"key":"S0956796814000185_ref15","doi-asserted-by":"publisher","DOI":"10.1145\/2577080.2577089"},{"key":"S0956796814000185_ref34","first-page":"1","volume-title":"Workshop on Generic Programming","author":"L\u00f6h","year":"2011"},{"key":"S0956796814000185_ref55","first-page":"115","volume-title":"Structures in Constructive Mathematics and Mathematical Logic, Part II","volume":"8","author":"Tseitin","year":"1968"},{"key":"S0956796814000185_ref51","first-page":"1","volume-title":"Haskell Workshop","author":"Sheard","year":"2002"},{"key":"S0956796814000185_ref42","unstructured":"O'Sullivan B. (2012). http:\/\/hackage.haskell.org\/package\/criterion."},{"key":"S0956796814000185_ref16","first-page":"1","volume-title":"Haskell Symposium","author":"Farmer","year":"2012"},{"key":"S0956796814000185_ref20","doi-asserted-by":"publisher","DOI":"10.1145\/1159842.1159856"},{"key":"S0956796814000185_ref32","first-page":"267","volume-title":"International symposium on formal methods","author":"Lazar","year":"2012"},{"key":"S0956796814000185_ref5","doi-asserted-by":"publisher","DOI":"10.1145\/1596638.1596652"},{"key":"S0956796814000185_ref27","doi-asserted-by":"crossref","first-page":"444","DOI":"10.1145\/1869459.1869497","volume-title":"International Conference on Object-Oriented Programming, Systems, Languages, and Applications","author":"Kats","year":"2010"},{"key":"S0956796814000185_ref23","unstructured":"Girard J.-Y. . (1972) Interpr\u00e9tation fonctionelle et \u00e9limination des coupures de l'arithm\u00e9tique d'ordre sup\u00e9rieur. Ph.D. thesis, Universit\u00e9 Paris Diderot, Paris."},{"key":"S0956796814000185_ref35","first-page":"37","volume-title":"Haskell Symposium","author":"Magalh\u00e3es","year":"2010"},{"key":"S0956796814000185_ref61","first-page":"60","volume-title":"Symposium on Principles of Programming Languages","author":"Wadler","year":"1989"},{"key":"S0956796814000185_ref47","unstructured":"Santos A. (1995) Compilation by Transformation in Non-Strict Functional Languages. Ph.D. thesis, University of Glasgow, Glasgow."},{"key":"S0956796814000185_ref7","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796812000275"},{"key":"S0956796814000185_ref6","doi-asserted-by":"publisher","DOI":"10.1145\/321992.321996"},{"key":"S0956796814000185_ref54","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796808006758"},{"key":"S0956796814000185_ref52","doi-asserted-by":"publisher","DOI":"10.1023\/A:1010000313106"},{"key":"S0956796814000185_ref46","doi-asserted-by":"publisher","DOI":"10.1145\/1411286.1411301"},{"key":"S0956796814000185_ref25","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2007.10.006"},{"key":"S0956796814000185_ref3","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2007.11.003"},{"key":"S0956796814000185_ref26","doi-asserted-by":"publisher","DOI":"10.1016\/0020-0190(86)90059-1"},{"key":"S0956796814000185_ref1","first-page":"71","volume-title":"Workshop on Partial Evaluation and Program Manipulation","author":"Adams","year":"2014"},{"key":"S0956796814000185_ref48","unstructured":"Schmidt U. , Schmidt M. & Kuseler T. (2012) http:\/\/hackage.haskell.org\/package\/hxt."},{"key":"S0956796814000185_ref17","volume-title":"Semantics Engineering with PLT Redex","author":"Felleisen","year":"2009"},{"key":"S0956796814000185_ref19","first-page":"277","volume-title":"Workshop on Declarative Programming in the Context of Object-Oriented Languages 2003","author":"Gibbons","year":"2005"},{"key":"S0956796814000185_ref60","first-page":"1","volume-title":"Symposium on Principles of Programming Languages","author":"Wadler","year":"1992"},{"key":"S0956796814000185_ref50","unstructured":"Sculthorpe N. & Gill A. (2014) http:\/\/hackage.haskell.org\/package\/kure."},{"key":"S0956796814000185_ref41","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796810000171"},{"key":"S0956796814000185_ref49","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-41582-1_6"},{"key":"S0956796814000185_ref8","first-page":"235","volume-title":"International Conference on Functional Programming","author":"Culpepper","year":"2010"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796814000185","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:36:07Z","timestamp":1779834967000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796814000185\/type\/journal_article"}},"subtitle":["A Haskell-Embedded Strategic Programming Language with Custom Closed Universes"],"short-title":[],"issued":{"date-parts":[[2014,7]]},"references-count":61,"journal-issue":{"issue":"4","published-print":{"date-parts":[[2014,7]]}},"alternative-id":["S0956796814000185"],"URL":"https:\/\/doi.org\/10.1017\/s0956796814000185","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2014,7]]}}}