{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:05:58Z","timestamp":1779836758607,"version":"3.53.1"},"reference-count":36,"publisher":"Cambridge University Press (CUP)","license":[{"start":{"date-parts":[[2025,4,28]],"date-time":"2025-04-28T00:00:00Z","timestamp":1745798400000},"content-version":"unspecified","delay-in-days":117,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":["cambridge.org"],"crossmark-restriction":true},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2025]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>OCaml Blockly is a block-based programming environment for a subset of the functional language OCaml, developed based on Google Blockly. The distinct feature of OCaml Blockly is that it knows the scoping and typing rules of OCaml. As such, for any complete program in OCaml Blockly, its OCaml counterpart compiles: it is free from syntax errors, scoping errors, and type errors. OCaml Blockly supports introductory constructs of OCaml that are sufficient to write the shortest path problem for the Tokyo metro network. This paper describes the design of OCaml Blockly and how it is used in a CS-major course on functional programming.<\/jats:p>","DOI":"10.1017\/s0956796825000073","type":"journal-article","created":{"date-parts":[[2025,4,28]],"date-time":"2025-04-28T02:19:48Z","timestamp":1745806788000},"update-policy":"https:\/\/doi.org\/10.1017\/policypage","source":"Crossref","is-referenced-by-count":1,"title":["OCaml Blockly"],"prefix":"10.1017","volume":"35","author":[{"ORCID":"https:\/\/orcid.org\/0000-0001-8040-0394","authenticated-orcid":false,"given":"KENICHI","family":"ASAI","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2025,4,28]]},"reference":[{"key":"S0956796825000073_ref36","first-page":"5","article-title":"Will students write tests early without coercion?","volume":"27","author":"Wrenn","year":"2020","journal-title":"Proceedings of the 20th Koli Calling International Conference on Computing Education Research"},{"key":"S0956796825000073_ref18","doi-asserted-by":"publisher","DOI":"10.1145\/2818314.2818331"},{"key":"S0956796825000073_ref3","doi-asserted-by":"publisher","DOI":"10.1109\/TETC.2017.2729585"},{"key":"S0956796825000073_ref10","volume-title":"An Introduction to Programming and Computing","author":"Felleisen","year":"2014"},{"key":"S0956796825000073_ref30","doi-asserted-by":"publisher","DOI":"10.1145\/358746.358755"},{"key":"S0956796825000073_ref5","doi-asserted-by":"publisher","DOI":"10.1145\/3236798"},{"key":"S0956796825000073_ref1","unstructured":"Asai, K. (2007) Foundations of Programming. SAIENSU-SHA, Tokyo. (In Japanese)."},{"key":"S0956796825000073_ref8","unstructured":"Cong, Y. & Asai, K. (2016) Implementing a stepper using delimited continuations. In SCSS 2016. 7th International Symposium on Symbolic Computation in Software Science, pp. 42\u201354."},{"key":"S0956796825000073_ref24","doi-asserted-by":"crossref","unstructured":"Pierce, J. , Cobb, T. & Pausch, R. (1998) Alice. In ACM SIGGRAPH 98 Conference Abstracts and Applications, p. 140.","DOI":"10.1145\/280953.281369"},{"key":"S0956796825000073_ref19","unstructured":"Matsumoto, H. & Asai, K. (2019) Visual programming editor for OCaml based on Blockly. In Proceedings of the 21th JSSST Workshop on Programming and Programming Languages, pp. 1\u201315. (In Japanese). Received best paper award and best presentation award."},{"key":"S0956796825000073_ref15","unstructured":"Harvey, B. & M\u00f6nig, J. (2010) Bringing \u201cno ceiling\u201d to scratch: Can one language serve kids and computer scientists? In Proceedings for Constructionism, pp. 1\u201310."},{"key":"S0956796825000073_ref32","volume-title":"Representing Expressive Types in Blocks Programming Languages","author":"Vasek","year":"2012"},{"key":"S0956796825000073_ref12","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796801004208"},{"key":"S0956796825000073_ref25","doi-asserted-by":"publisher","DOI":"10.1145\/2591708.2591738"},{"key":"S0956796825000073_ref23","volume-title":"Types and Programming Languages","author":"Pierce","year":"2002"},{"key":"S0956796825000073_ref16","doi-asserted-by":"publisher","DOI":"10.4204\/EPTCS.170.1"},{"key":"S0956796825000073_ref34","doi-asserted-by":"publisher","DOI":"10.1002\/spe.2187"},{"key":"S0956796825000073_ref35","unstructured":"Wakikawa, N. & Tsushima, K. (2018) Practical type error slicer and its evaluation. In Proceedings of the 20th JSSST Workshop on Programming and Programming Languages, pp. 1\u201317. (In Japanese)."},{"key":"S0956796825000073_ref9","volume-title":"How to Design Programs. An Introduction to Computing and Programming","author":"Felleisen","year":"2001"},{"key":"S0956796825000073_ref6","doi-asserted-by":"publisher","DOI":"10.1145\/507635.507659"},{"key":"S0956796825000073_ref4","first-page":"2","article-title":"Henblocks: Structured editing for coq","volume":"2022","author":"Boey","year":"2022","journal-title":"The Coq Workshop"},{"key":"S0956796825000073_ref7","first-page":"320","volume-title":"Programming Languages and Systems (ESOP 2001), Lecture Notes in Computer Science","volume":"2028","author":"Clements","year":"2001"},{"key":"S0956796825000073_ref14","doi-asserted-by":"publisher","DOI":"10.4204\/EPTCS.295.2"},{"key":"S0956796825000073_ref21","doi-asserted-by":"publisher","DOI":"10.1145\/3563767.3568127"},{"key":"S0956796825000073_ref26","doi-asserted-by":"publisher","DOI":"10.1109\/BB48857.2019.8941214"},{"key":"S0956796825000073_ref28","doi-asserted-by":"crossref","unstructured":"Ren, Y. , Krishnamurthi, S. & Fisler, K. (2019) What help do students seek in TA office hours? In Proceedings of the 2019 ACM Conference on International Computing Education Research (ICER\u201919), pp. 41\u201349.","DOI":"10.1145\/3291279.3339418"},{"key":"S0956796825000073_ref17","unstructured":"Kitagawa, M. & Asai, K. (2021) Analysis of students learning OCaml. In Proceedings of the 23rd JSSST Workshop on Programming and Programming Languages, pp. 1\u201316. (In Japanese). Received best presentation award."},{"key":"S0956796825000073_ref29","doi-asserted-by":"publisher","DOI":"10.1145\/1592761.1592779"},{"key":"S0956796825000073_ref22","unstructured":"Omar, C. , Voysey, I. , Hilton, M. , Sunshine, J. , Goues, C. L. , Aldrich, J. & Hammer, M. A. (2017) Toward semantic foundations for program editors. In 2nd Summit on Advances in Programming Languages (SNAPL 2017). Dagstuhl, Germany. Schloss Dagstuhl\u2013Leibniz-Zentrum fuer Informatik, pp. 11:1\u201311:12."},{"key":"S0956796825000073_ref2","doi-asserted-by":"publisher","DOI":"10.1145\/3704253.3706137"},{"key":"S0956796825000073_ref20","doi-asserted-by":"publisher","DOI":"10.1109\/VL-HCC57772.2023.00016"},{"key":"S0956796825000073_ref31","first-page":"190","volume-title":"An embedded type debugger. In Implementation and Application of Functional Languages (IFL 2012), Lecture Notes in Computer Science","volume":"8241","author":"Tsushima","year":"2013"},{"key":"S0956796825000073_ref27","first-page":"389","volume-title":"Advanced Topics in Types and Programming Languages","author":"Pottier","year":"2004"},{"key":"S0956796825000073_ref33","first-page":"41","volume-title":"Towards user-friendly projectional editors. In Software Language Engineering","volume":"8706","author":"Voelter","year":"2014"},{"key":"S0956796825000073_ref13","doi-asserted-by":"publisher","DOI":"10.1109\/BLOCKS.2015.7369000"},{"key":"S0956796825000073_ref11","doi-asserted-by":"publisher","DOI":"10.1145\/3127323"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796825000073","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:37:03Z","timestamp":1779835023000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796825000073\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025]]},"references-count":36,"alternative-id":["S0956796825000073"],"URL":"https:\/\/doi.org\/10.1017\/s0956796825000073","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025]]},"assertion":[{"value":"\u00a9 The Author(s), 2025. Published by Cambridge University Press","name":"copyright","label":"Copyright","group":{"name":"copyright_and_licensing","label":"Copyright and Licensing"}},{"value":"This is an Open Access article, distributed under the terms of the Creative Commons Attribution licence (https:\/\/creativecommons.org\/licenses\/by\/4.0\/), which permits unrestricted re-use, distribution and reproduction, provided the original article is properly cited.","name":"license","label":"License","group":{"name":"copyright_and_licensing","label":"Copyright and Licensing"}},{"value":"This content has been made available to all.","name":"free","label":"Free to read"}],"article-number":"e12"}}