{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,2,5]],"date-time":"2026-02-05T12:20:22Z","timestamp":1770294022720,"version":"3.49.0"},"publisher-location":"Berlin, Heidelberg","reference-count":39,"publisher":"Springer Berlin Heidelberg","isbn-type":[{"value":"9783662544334","type":"print"},{"value":"9783662544341","type":"electronic"}],"license":[{"start":{"date-parts":[[2017,1,1]],"date-time":"2017-01-01T00:00:00Z","timestamp":1483228800000},"content-version":"tdm","delay-in-days":0,"URL":"https:\/\/www.springer.com\/tdm"},{"start":{"date-parts":[[2017,1,1]],"date-time":"2017-01-01T00:00:00Z","timestamp":1483228800000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.springer.com\/tdm"}],"content-domain":{"domain":["link.springer.com"],"crossmark-restriction":false},"short-container-title":[],"published-print":{"date-parts":[[2017]]},"DOI":"10.1007\/978-3-662-54434-1_21","type":"book-chapter","created":{"date-parts":[[2017,3,18]],"date-time":"2017-03-18T04:20:06Z","timestamp":1489810806000},"page":"556-583","update-policy":"https:\/\/doi.org\/10.1007\/springer_crossmark_policy","source":"Crossref","is-referenced-by-count":8,"title":["APLicative Programming with Naperian\u00a0Functors"],"prefix":"10.1007","author":[{"given":"Jeremy","family":"Gibbons","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"297","published-online":{"date-parts":[[2017,3,19]]},"reference":[{"key":"21_CR1","doi-asserted-by":"crossref","unstructured":"Abe, A., Sumii, E.: A simple and practical linear algebra library interface with static size checking. In: Kiselyov, O., Garrigue, J. (eds.) ML Family Workshop. EPTCS, vol. 198, pp. 1\u201321 (2014)","DOI":"10.4204\/EPTCS.198.1"},{"key":"21_CR2","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"121","DOI":"10.1007\/978-3-642-24276-2_8","volume-title":"Implementation and Application of Functional Languages","author":"E Axelsson","year":"2011","unstructured":"Axelsson, E., Claessen, K., Sheeran, M., Svenningsson, J., Engdal, D., Persson, A.: The design and implementation of feldspar. In: Hage, J., Moraz\u00e1n, M.T. (eds.) IFL 2010. LNCS, vol. 6647, pp. 121\u2013136. Springer, Heidelberg (2011). doi:10.1007\/978-3-642-24276-2_8"},{"key":"21_CR3","doi-asserted-by":"crossref","unstructured":"Bird, R., Gibbons, J., Mehner, S., Voigtl\u00e4nder, J., Schrijvers, T.: Understanding idiomatic traversals backwards and forwards. In: Haskell Symposium. ACM (2013)","DOI":"10.1145\/2503778.2503781"},{"key":"21_CR4","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"52","DOI":"10.1007\/BFb0054285","volume-title":"Mathematics of Program Construction","author":"R Bird","year":"1998","unstructured":"Bird, R., Meertens, L.: Nested datatypes. In: Jeuring, J. (ed.) MPC 1998. LNCS, vol. 1422, pp. 52\u201367. Springer, Heidelberg (1998). doi:10.1007\/BFb0054285"},{"key":"21_CR5","doi-asserted-by":"crossref","unstructured":"Chakravarty, M.M.T., Keller, G., Lee, S., McDonell, T.L., Grover, V.: Accelerating Haskell array codes with multicore GPUs. In: Declarative Aspects of Multicore Programming, pp. 3\u201314. ACM (2011)","DOI":"10.1145\/1926354.1926358"},{"key":"21_CR6","doi-asserted-by":"crossref","unstructured":"Claessen, K., Sheeran, M., Svensson, B.J.: Expressive array constructs in an embedded GPU kernel programming language. In: Declarative Aspects of Multicore Programming, pp. 21\u201330. ACM (2012)","DOI":"10.1145\/2103736.2103740"},{"key":"21_CR7","doi-asserted-by":"crossref","unstructured":"Eaton, F.: Statically typed linear algebra in Haskell (demo). In: Haskell Workshop, pp. 120\u2013121. ACM (2006)","DOI":"10.1145\/1159842.1159859"},{"key":"21_CR8","doi-asserted-by":"publisher","first-page":"131","DOI":"10.1007\/978-1-349-91518-7_7","volume-title":"The Fun of Programming. Cornerstones in Computing","author":"C Elliott","year":"2003","unstructured":"Elliott, C.: Functional images. In: Gibbons, J., de Moor, O. (eds.) The Fun of Programming. Cornerstones in Computing, pp. 131\u2013150. Palgrave, Basingstoke (2003)"},{"key":"21_CR9","doi-asserted-by":"crossref","unstructured":"Elliott, C., Hudak, P.: Functional reactive animation. In: International Conference on Functional Programming. ACM (1997)","DOI":"10.1145\/258948.258973"},{"key":"21_CR10","doi-asserted-by":"crossref","unstructured":"Elsman, M., Dybdal, M.: Compiling a subset of APL into a typed intermediate language. In: Workshop on Libraries, Languages, and Compilers for Array Programming, pp. 101\u2013106. ACM (2014)","DOI":"10.1145\/2627373.2627390"},{"key":"21_CR11","volume-title":"Semantics Engineering with PLT Redex","author":"M Felleisen","year":"2009","unstructured":"Felleisen, M., Findler, R.B., Flatt, M.: Semantics Engineering with PLT Redex. MIT Press, Cambridge (2009)"},{"issue":"1","key":"21_CR12","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1007\/BF00288933","volume":"4","author":"RA Finkel","year":"1974","unstructured":"Finkel, R.A., Bentley, J.L.: Quad trees: a data structure for retrieval on composite keys. Acta Informatica 4(1), 1\u20139 (1974)","journal-title":"Acta Informatica"},{"key":"21_CR13","unstructured":"GHC Team: Glasgow Haskell Compiler. https:\/\/www.haskell.org\/ghc\/"},{"key":"21_CR14","doi-asserted-by":"crossref","unstructured":"Gibbons, J.: APLicative programming with Naperian functors: Haskell code, January 2017. http:\/\/www.cs.ox.ac.uk\/jeremy.gibbons\/publications\/aplicative.hs","DOI":"10.1145\/2976022.2976023"},{"key":"21_CR15","doi-asserted-by":"publisher","DOI":"10.1007\/978-1-349-91518-7","volume-title":"The Fun of Programming. Cornerstones in Computing","author":"J Gibbons","year":"2003","unstructured":"Gibbons, J., de Moor, O.: The Fun of Programming. Cornerstones in Computing. Palgrave, Basingstoke (2003)"},{"key":"21_CR16","doi-asserted-by":"crossref","unstructured":"Guibas, L.J., Wyatt, D.K.: Compilation and delayed evaluation in APL. In: Principles of Programming Languages, pp. 1\u20138. ACM (1978)","DOI":"10.1145\/512760.512761"},{"key":"21_CR17","unstructured":"Peter Hancock. What is a Naperian container? June 2005. http:\/\/sneezy.cs.nott.ac.uk\/containers\/blog\/?p=14"},{"issue":"5","key":"21_CR18","doi-asserted-by":"publisher","first-page":"493","DOI":"10.1017\/S095679680100404X","volume":"11","author":"R Hinze","year":"2001","unstructured":"Hinze, R.: Manufacturing datatypes. J. Funct. Program. 11(5), 493\u2013524 (2001)","journal-title":"J. Funct. Program."},{"key":"21_CR19","doi-asserted-by":"publisher","first-page":"245","DOI":"10.1007\/978-1-349-91518-7_12","volume-title":"The Fun of Programming. Cornerstones in Computing","author":"R Hinze","year":"2003","unstructured":"Hinze, R.: Fun with phantom types. In: Gibbons, J., de Moor, O. (eds.) The Fun of Programming. Cornerstones in Computing, pp. 245\u2013262. Palgrave, Basingstoke (2003)"},{"key":"21_CR20","unstructured":"Hudak, P., Jones, M.P.: Haskell vs Ada vs C++ vs Awk vs ...: an experiment in software prototyping productivity. Department of Computer Science, Yale, July 1994"},{"key":"21_CR21","doi-asserted-by":"publisher","DOI":"10.1145\/1460833.1460872","volume-title":"A Programming Language","author":"KE Iverson","year":"1962","unstructured":"Iverson, K.E.: A Programming Language. Wiley, Hoboken (1962)"},{"key":"21_CR22","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"302","DOI":"10.1007\/3-540-57880-3_20","volume-title":"Programming Languages and Systems \u2014 ESOP \u201994","author":"CB Jay","year":"1994","unstructured":"Jay, C.B., Cockett, J.R.B.: Shapely types and shape polymorphism. In: Sannella, D. (ed.) ESOP 1994. LNCS, vol. 788, pp. 302\u2013316. Springer, Heidelberg (1994). doi:10.1007\/3-540-57880-3_20"},{"key":"21_CR23","unstructured":"Jsoftware, Inc. Jsoftware: High performance development platform (2016). http:\/\/www.jsoftware.com"},{"key":"21_CR24","doi-asserted-by":"crossref","unstructured":"Keller, G., Chakravarty, M., Leschchinskiy, R., Jones, S.P., Lippmeier, B.: Regular, shape-polymorphic parallel arrays in Haskell. In: International Conference on Functional Programming, pp. 261\u2013272. ACM (2010)","DOI":"10.1145\/1932681.1863582"},{"key":"21_CR25","doi-asserted-by":"crossref","unstructured":"Lindley, S., McBride, C.: Hasochism: the pleasure and pain of dependently typed Haskell programming. In: Haskell Symposium, pp. 81\u201392. ACM (2013)","DOI":"10.1145\/2578854.2503786"},{"issue":"1","key":"21_CR26","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1017\/S0956796807006326","volume":"18","author":"C McBride","year":"2008","unstructured":"McBride, C., Paterson, R.: Applicative programming with effects. J. Funct. Program. 18(1), 1\u201313 (2008)","journal-title":"J. Funct. Program."},{"key":"21_CR27","doi-asserted-by":"crossref","unstructured":"McKinna, J.: Why dependent types matter. In: Principles of Programming Languages, p. 1. ACM (2006). http:\/\/www.cs.nott.ac.uk\/ psztxa\/publ\/ydtm.pdf","DOI":"10.1145\/1111037.1111038"},{"key":"21_CR28","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"217","DOI":"10.1007\/3-540-12925-1_41","volume-title":"International Symposium on Programming","author":"A Mycroft","year":"1984","unstructured":"Mycroft, A.: Polymorphic type schemes and recursive definitions. In: Paul, M., Robinet, B. (eds.) Programming 1984. LNCS, vol. 167, pp. 217\u2013228. Springer, Heidelberg (1984). doi:10.1007\/3-540-12925-1_41"},{"key":"21_CR29","doi-asserted-by":"publisher","DOI":"10.1017\/CBO9780511530104","volume-title":"Purely Functional Data Structures","author":"C Okasaki","year":"1998","unstructured":"Okasaki, C.: Purely Functional Data Structures. CUP, Cambridge (1998)"},{"key":"21_CR30","doi-asserted-by":"crossref","unstructured":"Jones, S.P., Launchbury, J.: Unboxed values as first class citizens in a non-strict functional language. In: Functional Programming Languages and Computer Architecture, pp. 636\u2013666. ACM (1991)","DOI":"10.1007\/3540543961_30"},{"key":"21_CR31","doi-asserted-by":"crossref","unstructured":"Eriksson, A.S., Jansson, P.: An Agda formalisation of the transitive closure of block matrices (extended abstract). In: Type-Driven Development, pp. 60\u201361. ACM (2016)","DOI":"10.1145\/2976022.2976025"},{"key":"21_CR32","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"62","DOI":"10.1007\/11894100_3","volume-title":"Central European Functional Programming School","author":"S-B Scholz","year":"2006","unstructured":"Scholz, S.-B.: Functional array programming in SaC. In: Horv\u00e1th, Z. (ed.) CEFP 2005. LNCS, vol. 4164, pp. 62\u201399. Springer, Heidelberg (2006). doi:10.1007\/11894100_3"},{"key":"21_CR33","doi-asserted-by":"crossref","unstructured":"Serrano, A., Hage, J., Bahr, P.: Type families with class, type classes with family. In: Haskell Symposium, pp. 129\u2013140. ACM (2015)","DOI":"10.1145\/2887747.2804304"},{"key":"21_CR34","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"27","DOI":"10.1007\/978-3-642-54833-8_3","volume-title":"Programming Languages and Systems","author":"J Slepak","year":"2014","unstructured":"Slepak, J., Shivers, O., Manolios, P.: An array-oriented language with static rank polymorphism. In: Shao, Z. (ed.) ESOP 2014. LNCS, vol. 8410, pp. 27\u201346. Springer, Heidelberg (2014). doi:10.1007\/978-3-642-54833-8_3"},{"key":"21_CR35","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"174","DOI":"10.1007\/978-3-642-41582-1_11","volume-title":"Implementation and Application of Functional Languages","author":"P Thiemann","year":"2013","unstructured":"Thiemann, P., Chakravarty, M.M.T.: Agda meets accelerate. In: Hinze, R. (ed.) IFL 2012. LNCS, vol. 8241, pp. 174\u2013189. Springer, Heidelberg (2013). doi:10.1007\/978-3-642-41582-1_11"},{"issue":"7","key":"21_CR36","doi-asserted-by":"publisher","first-page":"643","DOI":"10.1016\/j.jlap.2009.03.002","volume":"78","author":"K Trojahner","year":"2009","unstructured":"Trojahner, K., Grelck, C.: Dependently typed array programs don\u2019t go wrong. J. Logic Algebraic Program. 78(7), 643\u2013664 (2009)","journal-title":"J. Logic Algebraic Program."},{"key":"21_CR37","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"223","DOI":"10.1007\/3-540-49372-7_24","volume-title":"Computing in Object-Oriented Parallel Environments","author":"TL Veldhuizen","year":"1998","unstructured":"Veldhuizen, T.L.: Arrays in Blitz++. In: Caromel, D., Oldehoeft, R.R., Tholburn, M. (eds.) ISCOPE 1998. LNCS, vol. 1505, pp. 223\u2013230. Springer, Heidelberg (1998). doi:10.1007\/3-540-49372-7_24"},{"key":"21_CR38","doi-asserted-by":"crossref","unstructured":"Xi, H., Pfenning, F.: Eliminating array bound checking through dependent types. In: Programming Language Design and Implementation. ACM (1998)","DOI":"10.1145\/277650.277732"},{"key":"21_CR39","doi-asserted-by":"crossref","unstructured":"Yorgey, B.A., Weirich, S., Cretin, J., Jones, S.P., Vytiniotis, D., Magalh\u00e3es, J.P.: Giving Haskell a promotion. In: Types in Language Design and Implementation, pp. 53\u201366. ACM (2012)","DOI":"10.1145\/2103786.2103795"}],"container-title":["Lecture Notes in Computer Science","Programming Languages and Systems"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/link.springer.com\/content\/pdf\/10.1007\/978-3-662-54434-1_21","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T01:41:16Z","timestamp":1750124476000},"score":1,"resource":{"primary":{"URL":"https:\/\/link.springer.com\/10.1007\/978-3-662-54434-1_21"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2017]]},"ISBN":["9783662544334","9783662544341"],"references-count":39,"URL":"https:\/\/doi.org\/10.1007\/978-3-662-54434-1_21","relation":{},"ISSN":["0302-9743","1611-3349"],"issn-type":[{"value":"0302-9743","type":"print"},{"value":"1611-3349","type":"electronic"}],"subject":[],"published":{"date-parts":[[2017]]},"assertion":[{"value":"19 March 2017","order":1,"name":"first_online","label":"First Online","group":{"name":"ChapterHistory","label":"Chapter History"}},{"value":"ESOP","order":1,"name":"conference_acronym","label":"Conference Acronym","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"European Symposium on Programming","order":2,"name":"conference_name","label":"Conference Name","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Uppsala","order":3,"name":"conference_city","label":"Conference City","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Sweden","order":4,"name":"conference_country","label":"Conference Country","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"2017","order":5,"name":"conference_year","label":"Conference Year","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"25 April 2017","order":7,"name":"conference_start_date","label":"Conference Start Date","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"28 April 2017","order":8,"name":"conference_end_date","label":"Conference End Date","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"26","order":9,"name":"conference_number","label":"Conference Number","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"esop2017a","order":10,"name":"conference_id","label":"Conference ID","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"http:\/\/www.etaps.org\/index.php\/2017\/esop","order":11,"name":"conference_url","label":"Conference URL","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"This content has been made available to all.","name":"free","label":"Free to read"}]}}